Javascript:如果找不到键,则在json数组中查找并推送到数组对象

时间:2018-07-27 16:02:57

标签: javascript angularjs

我有一个json数组:

  0: {Id: "1", name: "Adam", Address: "123", userId: "i98"}
  1: {Id: "2", name: "John", Address: "456"}

在上面的数组中,第二个数组没有可用的userId密钥。

如何循环遍历上面的数组并检查是否没有可用的userId密钥,然后添加值为0的密钥。例如,添加userId:“ 0”

我尝试过的是:

let jsonData = JSON.parse(JSON.stringify(userData));

 for (const obj of jsonData) {
    var hasId = false;
      let objId = obj.find((o, i) => {
         if (o.userId === "userId") {
          hasId = true;
        }
      });
      if (!hasId) {
         obj.push();
       }
    }

但这给了我错误:

obj.find is not a function

任何输入可解决我的问题并将键值推入数组。

2 个答案:

答案 0 :(得分:2)

在您的代码上,obj是一个对象,并且对象上没有find方法。如果要检查对象是否具有数组,可以if( obj.userId )

您可以使用forEach遍历数组。

let jsonData  = [{Id: "1", name: "Adam", Address: "123", userId: "i98"},{Id: "2", name: "John", Address: "456"}];

jsonData.forEach(o => {
  o.userId = o.userId || 0; //Assign 0 if userId is undefined.
})

console.log(jsonData);

答案 1 :(得分:2)

您可以按照以下方式使用Array.prototype.map()Object.prototype.hasOwnProperty()

var jsonData = [{Id: "1", name: "Adam", Address: "123", userId: "i98"},{Id: "2", name: "John", Address: "456"}]

jsonData = jsonData.map(i => {
  if(!i.hasOwnProperty('userId'))
    i.userId = 0;
  return i;
});

console.log(jsonData);