Node.js和lodash - 克隆JSON对象只返回特定元素

时间:2015-01-25 18:57:42

标签: json node.js clone lodash

我要求克隆JSON对象但是删除特定元素。我试图使用lodash clone()。测试代码:

var _ = require('lodash');

var obj = {
    "config": {
        "items": [
            {
                "k1": "foo",
                "k2": "xx",
                "k3": "yy"

            },
            {
                "k1": "bar",
                "k2": "zz",
                "k3": "aa"
            }
        ]
    }
};

var clone = _.cloneDeep(obj, function(value) {

    // debug
    if(value.k2 == "xx"){
        console.log(value);
    }

    return value.k2 == "xx" ? value : undefined;
});

console.log("CLONE:  "+JSON.stringify(clone));

我想返回一个克隆对象,但只返回K2 =“xx”的项目。执行上述操作表明正在找到正确的项目,但返回的克隆对象还包括所有其他项目:

{ k1: 'foo', k2: 'xx', k3: 'yy' }
CLONE:  {"config":{"items":[{"k1":"foo","k2":"xx","k3":"yy"},{"k1":"bar","k2":"zz","k3":"aa"}]}}

有人可以建议我如何克隆和删除特定元素吗?

更新:要清楚,我需要两个对象。原件必须完好无损,然后是克隆版本,只有所需的属性。

1 个答案:

答案 0 :(得分:1)

var obj = {
    "config": {
        "items": [
            {
                "k1": "foo",
                "k2": "xx",
                "k3": "yy"

            },
            {
                "k1": "bar",
                "k2": "zz",
                "k3": "aa"
            }
        ]
    }
};    

var cloneObj = _.cloneDeep(obj);

cloneObj.config.items = cloneObj.config.items.filter(function(item) {
   return item.k2 === 'xx';
});


console.log(obj);
console.log(cloneObj);