我有一个对象数组:
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;
}
答案 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();