在JavaScript中,如何在第一个包含它的另一个对象中删除对象或行?
var apple = { 'color': 'red', 'price': 100, 'origin': 'Japan' };
var fruits = { Object, Object, Object }; // objects: apple, orange, mango
delete fruits[apple]; // this does not work
'删除水果[苹果]'或this SO thread中解释的其他形式不起作用。
只需将'object1'作为参数提供,就可以从'object2'中删除'object1'吗?
Deleting a row from javascript object中指出的方法:
var newFruits = fruits.filter(function( apple ) {
return fruits.color != apple.color &&
fruits.price != apple.price &&
fruits.origin != apple.origin;
});
也不起作用。
修改
fruits
只包含{ 'color', 'price' , 'origin' }
行,因此是最后一种方法。实际上,我需要从可能位于fruits
数组中的新数组中比较这三个组件。
答案 0 :(得分:1)
从另一个问题中正确应用该方法将是:
var apple = { 'color': 'red', 'price': 100, 'origin': 'Japan' };
var newFruits = fruits.filter(function( obj ) {
return obj.color != apple.color &&
obj.price != apple.price &&
obj.origin != apple.origin;
});
您尝试访问fruits.color
,因为数组没有undefined
属性,所以color
始终返回.filter
。相反,您必须将数组的每个元素的属性与您的引用对象进行比较。我建议查看MDN documentation以了解{{1}}如何工作(它期望哪些参数,哪些参数传递给回调等)。
答案 1 :(得分:0)
你需要一些钥匙才能获得价值:
如果你在果子上工作的例子:
var fruits =
{
"apple": {
'color': 'red',
'price': 100,
'origin': 'Japan'
}
//other fruits
}
很容易只需要以下代码:
delete fruits['apple'];
我不明白你为什么用它来尝试删除。
var newFruits = fruits.filter(function( apple ) {
return fruits.color != apple.color &&
fruits.price != apple.price &&
fruits.origin != apple.origin;
});
var Fruits = function(){
this.values = {
"apple": {
'color': 'red',
'price': 100,
'origin': 'Japan'
}
}
this.filter = function(obj){
var f = {}; //list of fruits
//Loop in all fruits
for(var name in this.values){
var fruit = this.values[name];
var validFruit = true;
//Check the obj values..
for(prop_name in obj){
var prop_value = obj[prop_name];
if((typeof fruit[prop_name] === "undefined") || (fruit[prop_name] !== prop_value)){
validFruit = false; //Is not valid
}
}
if(validFruit === true){
f[name] = fruit;
}
}
return f;
};
this.deleteIfHas = function(obj){
var list = this.filter(obj);
for(var key in list){
delete this.values[key];
}
}
this.setFruit = function(name, info){
this.values[name] = info;
}
this.getFruit = function(name){
return (typeof this.values[name] !== "undefined") ? this.values[name] : false;
}
}
var classFruit = new Fruits();
console.log(classFruit.filter({"origin":"Japan"})); // {"apple":{values of apple}}
classFruit.deleteIfHas({"origin":"Japan"}); //Delete apple
console.log(classFruit.values); //return {} because i delete apple