lodash推动交替成阵列

时间:2018-02-13 18:44:24

标签: javascript lodash

我有一个对象数组:

const a1 = [ obj1 ];
const a2 = [ obj1, obj2, ojb3 ];

我希望split然后join这个数组带有一个名为" joiner"的对象。

我希望最终结果:

const a1Joined = [ obj1 ];
const a2Joined = [ obj1, joiner, obj2, joiner, ojb3 ];

我目前有自己的功能,但现在想要以lodash的方式做到这一点。我想到了这个,但它下面的丑陋的lodash方式,但它也很难看,有更清洁的方式吗? (理想情况下,执行此操作的单个lodash方法)。

const a2 = [{id:1}, {id:2}, {id:3}];
const joiner = { id:'join' };
const joined = _.flatten(_.zip(a2, new Array(a2.length-1).fill(joiner)));
joined.pop();
JSON.stringify(joined, null, 4);

我注意到了lodash中的_.join函数,但这与Array.prototype.join字面意思相同,这是令人惊讶的,我希望这个_.join可以做我想要的

这是我目前的方法:

function pushAlternating(aTargetArr, aEntry) {
    // mutates aTargetArr
    let l = aTargetArr.length;
    for (let i=l-1; i>0; i--) {
        aTargetArr.splice(i, 0, aEntry);
    }

    return aTargetArr;
}

1 个答案:

答案 0 :(得分:1)

这是一个解决方案,使用flatMap创建一个备用项目数组并加入,然后使用dropRight删除最后一个元素。:

const joined = _.dropRight(_.flatMap(a2, item => [item, joiner]), 1);

或使用链接:

const joined = _(a2)
    .flatMap(item => [item, joiner])
    .dropRight(1)
    .value();

或者,可以使用旧的流行寒冷去除那个违规的最后一个元素:

let joined = _.flatMap(a2, item => [item, joiner]);

joined.pop();