Ric*_*des 7 javascript arrays node.js ecmascript-6
我在这里编写了一些代码,以使用以下逻辑在数组上添加一个元素
如果该元素存在于数组中,则函数应从数组中删除该元素并返回没有给定元素的数组,否则应返回附加了给定元素的数组。
考虑到这一点,我在想是否有更好的方法来做到这一点,这是我为此编写的代码。
function filterArray(arr, obj, key) {
for (let i = 0; i < arr.length; i++) {
if (arr[i][key] === obj[key]) {
const newArr = [...arr]
newArr.splice(i, 1)
return newArr
}
}
return [...arr, obj]
}
const fruits = [
{ id: 1, fruit: "Apple" },
{ id: 2, fruit: "Banana" },
{ id: 3, fruit: "Pineapple" }
]
const removedBanana = filterArray(fruits, {
id: 3,
fruit: "Banana"
}, "fruit")
const addedStrawberry = filterArray(fruits, {
id: 4,
fruit: "Strawberry"
}, "fruit")
console.log(removedBanana) // [ { id: 1, fruit: 'Apple' }, { id: 3, fruit: 'Pineapple' } ]
console.log(addedStrawberry)
// [
// { id: 1, fruit: 'Apple' },
// { id: 2, fruit: 'Banana' },
// { id: 3, fruit: 'Pineapple' },
// { id: 4, fruit: 'Strawberry' }
// ]Run Code Online (Sandbox Code Playgroud)
在 ES6 上有更好的方法来做到这一点吗?
编辑
如果可能,我只想迭代数组一次,制作 O(n) 算法
这种方法通过查找索引和拼接(如果找到)或将对象推送到数组来改变数组。结果与传递的数组具有相同的对象引用。
function filterArray(array, object, key) {
var index = array.findIndex(o => o[key] === object[key]);
if (index === -1) array.push(object);
else array.splice(index, 1);
return array;
}
const
fruits = [{ id: 1, fruit: "Apple" }, { id: 2, fruit: "Banana" }, { id: 3, fruit: "Pineapple" }];
console.log(filterArray(fruits, { id: 3, fruit: "Banana" }, "fruit"));
console.log(filterArray(fruits, { id: 4, fruit: "Strawberry" }, "fruit"));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
对于非变异方法,您可以在函数的头部获取一个副本并执行与上述相同的操作。
function filterArray([...array], object, key) {
Run Code Online (Sandbox Code Playgroud)
function filterArray([...array], object, key) {
Run Code Online (Sandbox Code Playgroud)
function filterArray(array, object, key) {
var index = array.findIndex(o => o[key] === object[key]);
if (index === -1) array.push(object);
else array.splice(index, 1);
return array;
}
const
fruits = [{ id: 1, fruit: "Apple" }, { id: 2, fruit: "Banana" }, { id: 3, fruit: "Pineapple" }];
console.log(filterArray(fruits, { id: 3, fruit: "Banana" }, "fruit"));
console.log(filterArray(fruits, { id: 4, fruit: "Strawberry" }, "fruit"));Run Code Online (Sandbox Code Playgroud)
您可以用来Array.some()检查该对象是否存在,以及是否将其过滤掉。如果没有,请添加。
function filterArray(arr, obj, key) {
return arr.some(o => obj[key] === o[key]) ? // if you can find the object
arr.filter(o => obj[key] !== o[key]) // remove it
:
[...arr, obj] // or add it if not
}
const fruits = [{"id":1,"fruit":"Apple"},{"id":2,"fruit":"Banana"},{"id":3,"fruit":"Pineapple"}]
const removedBanana = filterArray(fruits, { id: 3, fruit: "Banana" }, "fruit")
const addedStrawberry = filterArray(fruits, { id: 4, fruit: "Strawberry" }, "fruit")
console.log(removedBanana) // [ { id: 1, fruit: 'Apple' }, { id: 3, fruit: 'Pineapple' } ]
console.log(addedStrawberry)
// [
// { id: 1, fruit: 'Apple' },
// { id: 2, fruit: 'Banana' },
// { id: 3, fruit: 'Pineapple' },
// { id: 4, fruit: 'Strawberry' }
// ]Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5091 次 |
| 最近记录: |