搜索并替换对象数组中的键

时间:2016-08-26 07:37:38

标签: javascript arrays json

我试图搜索名为" SerialNumber"在对象数组中,用" SNo"

替换
var object = [{
    "SerialNumber": 001,
    "name": "user1"
}, {
    "SerialNumber": 002,
    "name": "user2"
}];
if ('SerialNumber' in object[0]) {
    object.forEach(function (key) {
        key.SNo = key.SerialNumber;
        delete key.SerialNumber;
    });
}
console.log(object)

如果object = [],则上述代码无效。是否有更好的方法(具有良好的性能)来搜索对象数组中的键并用新键替换。

6 个答案:

答案 0 :(得分:4)

您可以使用Array#forEach并检查密钥是否存在。



function replace(oldKey, newKey, array) {
    array.forEach(function (o) {
        if (oldKey in o) {
            o[newKey] = o[oldKey];
            delete o[oldKey];
        }
    });
}

var object = [{ "SerialNumber": '001', "name": "user1" }, { "SerialNumber": '002', "name": "user2" }];
replace('SerialNumber', 'SNo', object);

console.log(object);




答案 1 :(得分:2)

看起来好像您切换了ifforeachobject是一个数组,因此您可以通过项目,并检查您的状况。

var object = [
    {
        "SerialNumber": 001,
        "name": "user1"
    },
    {
        "SerialNumber": 002,
        "name": "user2"
    }
];

object.forEach(function (item)  {
    if (item.SerialNumber !== undefined) {
        item.SNo = item.SerialNumber;
        delete item.SerialNumber;
    }
});

答案 2 :(得分:1)

尝试这样的事情

object.forEach(function(obj){
  if(obj.hasOwnProperty("SerialNumber")){
    obj["SNo"] = obj["SerialNumber"];
    delete obj["SerialNumber"];
  }
});

答案 3 :(得分:0)

您必须将if条件移动到forEach回调中。 否则,它只会查找第一个元素的SerialNumber,如果它不存在则会崩溃。

var array = [{
    "SerialNumber": 001,
    "name": "user1"
}, {
    "SerialNumber": 002,
    "name": "user2"
}];
array.forEach(function (element) {
    if(element.SerialNumber) {
        element.SNo = element.SerialNumber;
        delete element.SerialNumber;
    }
});
console.log(array);

答案 4 :(得分:0)

从数组中获取对象后检查密钥。

object.forEach(function (key) {
    if ('SerialNumber' in key) {
        key.SNo = key.SerialNumber;
        delete key.SerialNumber;
    }
});

如果对象没有元素,它将起作用。

答案 5 :(得分:0)

如果要更改数组中对象的键,则最好将数组元素映射到自身。

这是一个例子。



var object = [{
        "SerialNumber": 001,
        "name": "user1"
        }, {
        "SerialNumber": 002,
        "name": "user2"
       }];
    object = object.map(function(value) {
       var tempObj = value;
       if (tempObj.SerialNumber) {
         tempObj.SNo = tempObj.SerialNumber;
         delete tempObj.SerialNumber;
       }
       return tempObj;
    });

    console.log(object);