在数组元素之间插入对象的最优雅方式是什么?
我相信有很多方法可以实现,但我正在寻找“优雅”的东西。
a = [
'a',
'b',
'c'
];
magicArrayJoin(a, {value: 255} ); // insert the same object between each item
result == [
'a',
{value: 255},
'b',
{value: 255}
'c'
];
所有提案都是受欢迎的 :)
一个普通的循环似乎是最好的:
function intersperse(arr, el) {
var res = [], i=0;
if (i < arr.length)
res.push(arr[i++]);
while (i < arr.length)
res.push(el, arr[i++]);
return res;
}
如果你正在寻找一些优雅的东西,它可能不得不使用某种concatMap
,如
function concatMap(arr, fn) { return [].concat.apply([], arr.map(fn)); }
function intersperse(arr, el) { return concatMap(arr, x => [el, x]).slice(1); }
你可以用flatMap来做。 例如,可以从lodash中找到它
_.flatMap([1,2,3,4], (value, index, array) =>
array.length -1 !== index // check for the last item
? [value, "s"]
: value
);
。OUPUTS
[1, "s", 2, "s", 3, "s", 4]
在我看来,最优雅的方式是这样的:
ES6语法版本
const insertIntoArray = (arr, value) => {
return arr.reduce((result, element, index, array) => {
result.push(element);
if (index < array.length - 1) {
result.push(value);
}
return result;
}, []);
};
用法:
insertIntoArray([1, 2, 3], 'x'); // => [1, 'x', 2, 'x', 3]
链接地址: http://www.djcxy.com/p/29325.html
上一篇: What is the most elegant way to insert objects between array elements?