如何在JS中复制JSON对象

时间:2015-03-23 19:45:45

标签: javascript json

我有这个包含一些数据的json对象,我正在对该对象进行搜索,当结果匹配时我想将它保存到另一个对象。什么是最好的方法。

我需要一些帮助,将我想要的数据复制到新变量中。

这就是我所拥有的。

myjson = JSON.parse(jsonData);
for(var x=0; x<myjson.ROWCOUNT;x++){
    if(myjson.DATA.PARTNUMBER[x].search(regex) != -1){
        console.log(myjson.DATA.PARTNUMBER[x]);
    }
}

如果我有显示部件号的console.log,我该怎么做才能复制X行的所有内容?

myjson有4列(ID,PARTNUMBER,DESCRIPTION,PRICE),但我只搜索partnumber。我需要将所有内容复制到新的json对象。

感谢。

3 个答案:

答案 0 :(得分:0)

myjson.DATA [x]是对包含匹配的PARTNUMBER的对象的引用。根据您要对其执行的操作,您可以将其用于阵列以供将来访问。 E.g:

myCopies = [];
myjson = JSON.parse(jsonData);
for(var x=0; x<myjson.ROWCOUNT;x++){
    if(myjson.DATA.PARTNUMBER[x].search(regex) != -1){
        console.log(myjson.DATA.PARTNUMBER[x]);
        myCopies.push(myjson.DATA[x]);
    }
}

// myCopies now contains references to all objects matched by partnumber

答案 1 :(得分:0)

您可以使用该帖子中的克隆功能复制对象 How do I correctly clone a JavaScript object?

function clone(obj) {
    if (null == obj || "object" != typeof obj) return obj;
    var copy = obj.constructor();
    for (var attr in obj) {
        if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
    }
    return copy;
}

它不会根据其结构复制您的对象。

答案 2 :(得分:-1)

如果有匹配的对象,简单的方法是硬复制所有属性

var myjson = JSON.parse(jsonData),
    output = [],
    matchedObj
;

for(var x=0; x<myjson.ROWCOUNT;x++){
    if(myjson.DATA.PARTNUMBER[x].search(regex) != -1){
        output.push({
            ID: myjson.DATA.ID[x],
            PARTNUMBER: myjson.DATA.PARTNUMBER[x],
            DESCRIPTION: myjson.DATA.DESCRIPTION[x],
            PRICE: myjson.DATA.PRICE[x]
        });
    }
}

console.log(output);

另一种方法是定义一个简单的函数来克隆匹配对象的所有属性

var myjson = JSON.parse(jsonData),
    output = [],
    matchedObj,
    clone = function(data, i) {
        var copy = {};

        for(var attribute in data) {
            if (data.hasOwnProperty(attribute )) {
                copy[attribute] = data[attribute][i];
            }
        }

        return copy;
    }
;


for(var x=0; x<myjson.ROWCOUNT;x++){
    if(myjson.DATA.PARTNUMBER[x].search(regex) != -1){
        output.push(clone(myjson.DATA, x));
    }
}

console.log(output);