我有一个数组[1,2,3,4,5,6]
和一个分隔符'~'
,我希望将它们组合成一个新的数组,其中'~'
是分隔符。
我希望输出为[1,'~', 2,'~', 3,'~', 4,'~', 5,'~', 6]
。
使用Lodash我有类似的内容:
var my_array = [1,2,3,4,5,6]
var separator = '~'
_.flatten(_.zip(my_array, new Array(my_array.length).fill(separator)))
但这感觉很难看,我确信有更好的方法。
编辑:即使上面的数组有int
,我也希望这适用于任何类型的对象。
答案 0 :(得分:8)
为什么不在pue Javascript:
次要更新: 以计算大于9的值
my_array.join("~")
.split(/\b/gi)
var my_array = [1,2,3,4,5,6,10,11]
var separator = '~'
console.info(my_array.join("~").split(/\b/gi));
更新(即使已关闭):
关于点,其他对象。这应该有效,即使不是单行。
var myArray = [1,2,3,45,6,10,new Date()];
var newArray = myArray.reduce((p,n)=>{
if(p.length){
p.push("~");
}
p.push(n);
return p;
},[]);
console.info(newArray)
答案 1 :(得分:5)
很简单的forEach
没有十几个临时数组等等:
var my_array = [1,2,3,4,5,6];
var result = [my_array[0]];
my_array.forEach(function(entry, index) {
if (index > 0) {
result.push("~", entry);
}
});
console.log(result);

或者你可以用一个临时数组摆脱if
:
var my_array = [1,2,3,4,5,6];
var result = [my_array[0]];
my_array.slice(1).forEach(function(entry, index) {
result.push("~", entry);
});
console.log(result);

答案 2 :(得分:3)
把帽子扔进去:
arr.map(x => [x, '~']).reduce((p, c) => p.concat(c));
这不是很hacky,它将每个元素映射到两个元素并将它们连接在一起,很容易概括:
const intercalate = (arr, sep) => arr.map(x => [x, sep])
.reduce((p, c) => p.concat(c))
.slice(0, -1);
或者使用单一缩减:
const intercalate = (arr, sep) => arr.reduce((p, c) => p.concat(c, sep)).slice(0, -1);
答案 3 :(得分:2)
以下是使用forEach
-
var a = [1,2,3]
var sep = '~'
var b = []
a.forEach(function(x) { b.push(x, sep) })
b.pop() // remove the last `~`
答案 4 :(得分:1)
使用_.flatMap,
var my_array = [1,2,3,4,5,6];
var separator = '~';
console.log(_.flatMap(my_array, function( v ){ return [v,separator] }).slice(0,-1));
<强>更新强>
确保删除结尾~
。
答案 5 :(得分:0)
如果需要,您可以使用Array#reduce
并连接波浪号。
var array = [1, 2, 3, 4, 5, 6],
result = array.reduce(function (r, a, i) {
return r.concat(i ? '~' : [], a);
}, []);
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
Anosther提案Array#forEach
var array = [1, 2, 3, 4, 5, 6],
result = [];
array.forEach(function (a) {
result.push(a, '~');
});
result.length--;
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 6 :(得分:0)
使用传统的for
循环
var nums = [1,2,3,4,5,6];
var dash = '~';
var res = [];
for (var i=0; i<nums.length; i++){
res.push(nums[i]);
res.push(dash);
}
res.pop();
console.log(res);
&#13;