Javascript 如何按名称从数组中正确删除对象?

Javascript 如何按名称从数组中正确删除对象?,javascript,Javascript,如何按名称(即关键字“bird”)从数组中删除创建的对象“bird”? var存储=[ {猫:{名字:“加菲尔德”,计数:3443,价格:1000} ]; 功能添加产品(新产品){ 储存。推送(新产品); } addProduct({dog:{name:“Rex”,计数:1488,价格:2000}); addProduct({bird:{name:{Eagle],计数:4042,价格:3000}); 函数deleteProductByName(productName){ 存储。删除(produc

如何按名称(即关键字“bird”)从数组中删除创建的对象“bird”?
var存储=[
{猫:{名字:“加菲尔德”,计数:3443,价格:1000}
];
功能添加产品(新产品){
储存。推送(新产品);
}
addProduct({dog:{name:“Rex”,计数:1488,价格:2000});
addProduct({bird:{name:{Eagle],计数:4042,价格:3000});
函数deleteProductByName(productName){
存储。删除(productName);
}
deleteProductByName(“鸟”)您可以这样做:

storage = storage.filter(item => Object.keys(item)[0] !== 'bird');

您可以从数组的末尾进行迭代并拼接找到的项,这将使用检查对象中是否存在该属性

功能添加产品(新产品){
储存。推送(新产品);
}
函数deleteProductByName(productName){
var i=存储长度;
而(我--){
if(存储[i]中的productName){
存储。拼接(i,1);
}
}
}
var存储=[{cat:{name:“Garfild”,计数:3443,价格:1000}}];
addProduct({dog:{name:“Rex”,计数:1488,价格:2000});
addProduct({bird:{name:{Eagle],计数:4042,价格:3000});
deleteProductByName(“鸟”);
控制台日志(存储)

.as控制台包装{max height:100%!important;top:0;}
修改删除函数,并根据删除是否成功返回false或true:

function deleteProductByName(productName) {
    var index = storage.indexOf(storage.filter(function(d,i){return Object.keys(d)[0] === productName})[0]);
       return !~index ? false : (storage.splice(index,1),true);
  }

如果过滤不是您想要的,但确实将数据删除到原始数组中,则可以这样编写删除:

var存储=[
{猫:{名字:“加菲尔德”,计数:3443,价格:1000}
];
功能添加产品(新产品){
储存。推送(新产品);
}
addProduct({dog:{name:“Rex”,计数:1488,价格:2000});
addProduct({bird:{name:{Eagle],计数:4042,价格:3000});
函数deleteProductByName(productName){
var index=storage.map(函数(e){return Object.keys(e.join();}).indexOf(产品名称);
存储.拼接(索引,1)
}
deleteProductByName(“鸟”);
console.log(存储)