如何加入数组,结果不是Javascript中的字符串?

时间:2017-02-28 11:45:17

标签: javascript lodash

我有一个数组[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,我也希望这适用于任何类型的对象。

7 个答案:

答案 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并连接波浪号。

&#13;
&#13;
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;
&#13;
&#13;

Anosther提案Array#forEach

&#13;
&#13;
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;
&#13;
&#13;

答案 6 :(得分:0)

使用传统的for循环

&#13;
&#13;
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;
&#13;
&#13;