Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 格式化数据数组,连接到单个字符串,并在每两个索引之间添加字符_Javascript_Arrays - Fatal编程技术网

Javascript 格式化数据数组,连接到单个字符串,并在每两个索引之间添加字符

Javascript 格式化数据数组,连接到单个字符串,并在每两个索引之间添加字符,javascript,arrays,Javascript,Arrays,假设我有一个这样的数据数组: var data = [ '10' '15', '10', '34', '40', '0', '10', '15' ]; 最后,我希望将“数据给我”格式合并成一个字符串,如下所示: var data = 'm10 15 l10 34 l40 0 l10 15'; 规则: a、 "m’永远是第一个字母 b、 "我永远是下面的字母 接近 我认为使用模数(%2)可能有效?但是我如何正确地循环,添加正确的字母,并加入一个长字符串?var out=''; var out

假设我有一个这样的数据数组:

var data = [ '10' '15', '10', '34', '40', '0', '10', '15' ];
最后,我希望将“数据给我”格式合并成一个字符串,如下所示:

var data = 'm10 15 l10 34 l40 0 l10 15';
规则:

a、 "m’永远是第一个字母

b、 "我永远是下面的字母


接近

我认为使用模数(%2)可能有效?但是我如何正确地循环,添加正确的字母,并加入一个长字符串?

var out='';
var out = '';

out = 'm' + data[0] + ' ';
for (var i = 1; i < data.length; i++) {
  if (i % 2 === 0) out += 'l';
  out += data[i] + ' ';
}

console.log(out);
out='m'+数据[0]+''; 对于(变量i=1;i

应该可以工作。

下面类似的内容,使用模运算符的简单循环可以工作:

// start with an empty string
var full_str = '';

// iterate over each data element
for (var i = 0; i < data.length; i++) {
    if (i === 0) {
        // add the leading 'm'
        full_str = 'm';
    } else {
        // if not the first element, add a space
        full_str += ' ';

        // if this is %2, add an `l`
        if ((i > 0) && ((i % 2) === 0)) {
            full_str += 'l';
        }
    }

    // add the current number to the string
    full_str += data[i];
}

虽然你的会起作用,但我不喜欢把“这是第一个元素吗”的条件逻辑放在循环中,我喜欢把它放在循环之外以获得更好的可读性和优化。@RevanProdigalKnight这是一个偏好问题,实际的“需要”取决于数组的大小。事实上,我认为我的方法比你的方法更具可读性(同样,个人偏好),但我确实同意,对于较大的数组,你的方法更有效(对于空数组,你的方法将抛出一个错误)。考虑到Ian在注释中给出的一行就足够了,这是大量代码(离完整解决方案只有一个子字符串和一个字符串连接。)@ScottSauyet定义“大量工作”?也许你的意思是“大量行”相反,从技术上讲,它们做的事情完全相同。两者都迭代整个列表并创建一个字符串-his使用内置数组函数,而mine则写出完整的循环,显示“幕后”的实际概念。如果OP无法做到这一点,那么一行代码并不能真正帮助他们学到很多东西……不管怎样,我完全支持更简短的代码,所以请随意向您喜欢的方向推荐OP=]@newfurniture:我几乎立即编辑了我的评论,说“很多代码”,这就是我真正的意思。我只是想指出,简明的代码是完全可读的;切换到该版本几乎没有损失,并且通过使用适当的抽象(即,
map
data.map(函数(val,idx){return(idx%2==0?“l”:“”)+val;}.join(“”)
几乎可以让你达到目的
// start with an empty string
var full_str = '';

if (data.length > 0) {
    // add the first number with a prefixed `m`
    full_str = 'm' + data[0];

    // iterate over each element, starting with the second
    for (var i = 1; i < data.length; i++) {
        // add a space before this element
        full_str += ' ';

        // if this is %2, add an `l`
        if ((i % 2) === 0) {
            full_str += 'l';
        }

        // add the current number to the string
        full_str += data[i];
    }
}