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

时间:2013-12-05 03:01:04

标签: javascript javascript-objects

在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数组中的新数组中比较这三个组件。

2 个答案:

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

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