javascript - 什么是删除数组上的对象的最佳方法

时间:2016-09-11 04:35:03

标签: javascript arrays

我想删除对象数组中的对象,但是我找不到比使用某个循环做更好的方法,在每个对象上都有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

3 个答案:

答案 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);




相关问题