gpt4 book ai didi

javascript - 如何有条件地从数组中替换、添加或删除对象

转载 作者:行者123 更新时间:2023-11-30 10:58:15 27 4
gpt4 key购买 nike

我有一个对象,我想根据这三个条件在数组对象中添加、删除或替换:

  1. 如果对象存在于数组中则移除它
  2. 如果对象的query 属性与数组中的项目匹配,则替换它
  3. 如果数组中不存在该对象则添加它

我认为它很简单,但是当我测试它时,它一直给我带来问题:

const arr = [
{
id: 1,
query: 'mangoes'
},
{
id: 2,
query: "alright"
}
]
// Should be removed:
const test1 = {
id: 2,
query: 'alright'
}

// Should be replaced:
const test2 = {
id: 3,
query: 'mangoes'
}

// Should be added
const test3 = {
id: 4,
query: 'ok'
}

const toggle = (payload) => {
const ans = arr

.filter(obj => obj.id != payload.id) // remove if needed
.map(obj => obj.query == payload.query ? // replace if needed
payload :
obj
)
.concat( // add if needed
arr.findIndex(obj => obj.id == payload.id) == -1 ?
payload : []
)

console.log(ans)
}

toggle(test1)
toggle(test2)
toggle(test3)

最佳解决方案是,如果我可以使用 Array.reduce 函数或任何其他可行的方法来实现它

最后使用 .concat() 只让我完成了前两个测试,而不是同时获得所有三个测试。

最佳答案

在这种情况下,使用 query 属性查找项目的索引会更容易。如果未找到项目 (-1),请添加负载。如果找到索引,将其切出,然后在 'id' 属性不匹配的情况下添加该项目:

const toggle = payload => {
const idx = arr.findIndex(o => o.query === payload.query) // find index with identical query

if(idx === -1) return [...arr, payload] // if none found add

return [
...arr.slice(0, idx),
...(payload.id === arr[idx].id ? [] : [payload]), // insert if same id
...arr.slice(idx + 1) // remove original

]
}

const arr = [{"id":1,"query":"mangoes"},{"id":2,"query":"alright"}]
// Should be removed:
const test1 = { id: 2, query: 'alright' }
// Should be replaced:
const test2 = { id: 3, query: 'mangoes' }
// Should be added
const test3 = { id: 4, query: 'ok' }

console.log(toggle(test1));
console.log(toggle(test2));
console.log(toggle(test3));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何有条件地从数组中替换、添加或删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59129876/

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