在数组元素之间插入对象的最优雅方式是什么?

我相信有很多方法可以实现,但我正在寻找“优雅”的东西。

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?

下一篇: insert an array inside another array