我想删除对象数组中的对象,但是我找不到比使用某个循环做更好的方法,在每个对象上都有ID
示例:
var array = [{
id : String,
price : Number,
someOtherVars : String
}]
var element = {
id : "00dks",//this is a unic value
price : 12,
someOtherVars : "some value"
}
var element2 = {
id : "a43sdk",
price : 30,
someOtherVars : "some value"
}
var element3 = {
id : "0as0d",
price : 122,
someOtherVars : "some value"
}
array.push(element);
array.push(element2);
array.push(element3);
所以......最有效的方法是什么?
ps:我正在寻找一种通过键访问元素的方法,不使用任何类型的循环,比如函数.find(),例如array["0as0d"]
,来获取element3
答案 0 :(得分:2)
不要使用数组,而应使用Map
。
var map = new Map();
var element = {
id : "00dks",//this is a unic value
price : 12,
someOtherVars : "some value"
}
var element2 = {
id : "a43sdk",
price : 30,
someOtherVars : "some value"
}
var element3 = {
id : "0as0d",
price : 122,
someOtherVars : "some value"
}
map.set(element.id, element);
map.set(element2.id, element2);
map.set(element3.id, element3);
// later...
if (map.delete("0as0d")) {
console.log('delete successful');
}
console.log(map.size);
答案 1 :(得分:1)
我做了一个findIndex,接着是splice。
const index = array.findIndex(a => a.id === id);
if (index !== -1) {
array.splice(index, 1);
}
为避免循环,请将数组存储为对象:
const map = {};
map[element1.id] = element1;
map[element2.id] = element2;
map[element3.id] = element3;
要检索元素,请使用
const element = map[whateverId];
要删除元素,请使用
delete map[whateverId];
要遍历地图,请使用:
for (var key in map) {
var value = map[key];
// do some stuff
}
答案 2 :(得分:1)
您无法以请求的方式访问数组:array["0as0d"]
,因为它是由整数索引,而不是字符串。如果你想以这种方式引用,你需要将你的对象存储在另一个对象中,键入id:
var asObject = array.reduce(function(obj, cur) {
obj[cur.id] = cur;
return obj;
}, {});
console.log(asObject["0as0d"]);
// to remove this item:
delete asObject["0as0d"];
您可以使用Array.filter
从阵列中删除该项目:
var element = {
id : "00dks",//this is a unic value
price : 12,
someOtherVars : "some value"
}
var element2 = {
id : "a43sdk",
price : 30,
someOtherVars : "some value"
}
var element3 = {
id : "0as0d",
price : 122,
someOtherVars : "some value"
}
var array = [];
array.push(element);
array.push(element2);
array.push(element3);
var id = '0as0d';
var filtered = array.filter(function(item) {
return item.id !== id;
});
console.log(filtered);