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];
}
}