从给定第一个的另一个对象中删除JS对象(行)



在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

最新更新