gpt4 book ai didi

javascript - 合并数组只添加新元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:56 24 4
gpt4 key购买 nike

嘿,我正在为一件本应非常简单的事情而伤脑筋。我有几个数组

//input

var array1 = ["white", "white", "yellow"];
var array2 = ["white", "white", "yellow", "red"];
var array3 = ["white", "white", "yellow", "orange"];

//desired output

var result = ["white", "white", "yellow", "red", "orange"];

这应该是一个简单的问题,但我一直无法解决这个问题。我尝试使用第一个数组的快照,然后查看颜色是否已经在快照数组中,将其从快照中删除,将其放入另一个快照等......但我最终得到了一行又一行的代码。甚至无法让它工作,因为我从快照中删除了所有“白色”颜色,而不仅仅是一个和其他出错的地方。

谁能给我第二个视角,因为我正在靠着墙上的自动取款机奔跑

我最后一次被要求提供代码的尝试

    let attacks = entry.attacks;
if(attacks !== undefined){
let lastSnapshot = [];

attacks.forEach(attack => {
if(lastSnapshot.length === 0){
attack.forEach(attackColor => {
lastSnapshot.push(attackColor)
})
}else{
let newSnapshot = [];
attack.forEach(attackColor => {
var start_index = lastSnapshot.findIndex(attackColor)
if(start_index !== -1){
var number_of_elements_to_remove = 1;
lastSnapshot.splice(start_index, number_of_elements_to_remove);
}

newSnapshot.push(attackColor)
})
lastSnapshot = newSnapshot;
}
})
}

最佳答案

您可以对数组使用 reduce,对数组的单个项目使用 forEach 以将项目添加到 r

然后使用哈希表存储访问过的项及其在临时结果数组r 中的最后一个索引。如果未找到项目,则推送实际值。

var array1 = ["white", "white", "yellow"],
array2 = ["white", "white", "yellow", "red"],
array3 = ["white", "white", "yellow", "orange"],
result = [array1, array2, array3].reduce((r, a) => {
var indices = Object.create(null);
a.forEach(b => {
var p = r.indexOf(b, indices[b] || 0);
indices[b] = p === -1 ? r.push(b) : p + 1;
});
return r;
});

console.log(result);

关于javascript - 合并数组只添加新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com