如何在JS中复制JSON对象

How to copy a JSON object in JS

本文关键字:复制 JSON 对象 JS      更新时间:2023-09-26

我有一个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),但我只搜索部件号。我需要将所有内容复制到新的json对象中。

谢谢。

您可以使用该帖子中的克隆函数复制对象如何正确克隆JavaScript对象?

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;
}

它不依赖于对象的结构来复制对象。

myjson.DATA[x]是对包含匹配PARTNUMBER的对象的引用。根据您想对它做什么,您可以将它添加到一个数组中以供将来访问。例如:

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

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

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);