在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
"删除水果[苹果]"或本SO线程中解释的其他形式不起作用。
如前所述,只提供"object1"作为参数,是否可以从"object2"中删除"object1"?
从javascript对象删除行中指示的方法:
var newFruits = fruits.filter(function( apple ) {
return fruits.color != apple.color &&
fruits.price != apple.price &&
fruits.origin != apple.origin;
});
也不起作用。
编辑
fruits
仅包含{ 'color', 'price' , 'origin' }
的行,因此是最后一种方法。实际上,我需要比较fruits
数组中的一个新数组中的这三个组件。
另一个问题中方法的正确应用是:
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
属性。相反,您必须将数组中每个元素的属性与引用对象进行比较。我建议查看MDN文档,了解.filter
是如何工作的(它需要哪些参数,哪些参数被传递给回调,等等)。
如何解决这些错误:
第一个你需要一些密钥来获得值:
型号
例如,如果你在水果上工作:
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;
});
Refactory我创建类来操作水果
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