Javascript 如何在对象文本数组中搜索和替换值

Javascript 如何在对象文本数组中搜索和替换值,javascript,arrays,Javascript,Arrays,我一直在试图找出如何在这样的对象数组中简单地搜索和替换一个值(在本例中,将等于null的任何值替换为未定义的值),数组键可能会有所不同: var array = [{ "name": "mike", "age": null }, { "name": "jim", "age": 99 }]; 预期结果: var array = [{ "name": mike, "age": undefined }, { "name": jim, "age": 99

我一直在试图找出如何在这样的对象数组中简单地搜索和替换一个值(在本例中,将等于null的任何值替换为未定义的值),数组键可能会有所不同:

var array = [{ 
  "name": "mike",
  "age": null
},
{ "name": "jim",
  "age": 99
}];
预期结果:

var array = [{ 
    "name": mike,
    "age": undefined
  },
  { "name": jim,
    "age": 99
  }];
我的印象是,我应该能够使用map()函数来实现这一点,但是没有一个文档示例对我有意义。我一直在尝试应用这个问题的解决方案:但没有任何成功

无论如何,如果有人愿意帮我指出正确的方向,这里有一个框架代码笔,你可以修改:

使用方法进行迭代和更新

var数组=[{
“姓名”:“迈克”,
“年龄”:空
}, {
“姓名”:“吉姆”,
“年龄”:99
}];
array.forEach(函数(v){
v、 年龄===null&&(v.age=未定义)
//或
//如果(v.age==null)v.age=未定义
})
console.log(数组)使用方法进行迭代和更新

var数组=[{
“姓名”:“迈克”,
“年龄”:空
}, {
“姓名”:“吉姆”,
“年龄”:99
}];
array.forEach(函数(v){
v、 年龄===null&&(v.age=未定义)
//或
//如果(v.age==null)v.age=未定义
})
console.log(数组)
var数组=[{
“姓名”:“迈克”,
“年龄”:空
},
{“姓名”:“吉姆”,
“年龄”:99
}];
array=array.map(函数(项){
如果(item.age==null){
//删除第1项。年龄;
item.age=未定义;
}
退货项目;
});
console.log(数组)
var数组=[{
“姓名”:“迈克”,
“年龄”:空
},
{“姓名”:“吉姆”,
“年龄”:99
}];
array=array.map(函数(项){
如果(item.age==null){
//删除第1项。年龄;
item.age=未定义;
}
退货项目;
});
console.log(数组)试试看

更新为仅更改名称为“mike”且年龄为空的值

注意:在使用对象之前,最好检查对象中是否存在属性

var数组=[{
“姓名”:“迈克”,
“年龄”:空
},
{“姓名”:“吉姆”,
“年龄”:99
}];
var-arr=[];
arr=array.map(函数(x){
如果(x.hasOwnProperty(“年龄”)&&x.hasOwnProperty(“姓名”)&&x[“年龄”]==null&&x[“姓名”]==mike”)
x[“年龄”]=未定义;
返回x;
});
控制台日志(arr)试试看

更新为仅更改名称为“mike”且年龄为空的值

注意:在使用对象之前,最好检查对象中是否存在属性

var数组=[{
“姓名”:“迈克”,
“年龄”:空
},
{“姓名”:“吉姆”,
“年龄”:99
}];
var-arr=[];
arr=array.map(函数(x){
如果(x.hasOwnProperty(“年龄”)&&x.hasOwnProperty(“姓名”)&&x[“年龄”]==null&&x[“姓名”]==mike”)
x[“年龄”]=未定义;
返回x;
});

控制台日志(arr)使用一些唯一/区别属性(本例中的名称?这里的ID很有用)过滤数组,然后直接更新对象:

var mike = array.filter(function(obj) { return obj.name === 'mike' })[0];
mike.age = undefined;

使用一些独特的属性(本例中的名称?这里的ID很有用)筛选数组,然后直接更新对象:

var mike = array.filter(function(obj) { return obj.name === 'mike' })[0];
mike.age = undefined;
和减少的方式

var arr=[{
“姓名”:“迈克”,
“年龄”:空
},
{“姓名”:“吉姆”,
“年龄”:99
}],
固定=arr.reduce((p,c)=>(c.age===null&&(c.age=void 0),p.concat(c)),[]);
控制台日志(固定)和缩减方式

var arr=[{
“姓名”:“迈克”,
“年龄”:空
},
{“姓名”:“吉姆”,
“年龄”:99
}],
固定=arr.reduce((p,c)=>(c.age===null&&(c.age=void 0),p.concat(c)),[]);

控制台日志(固定)因为您说过密钥可能不同,所以需要执行两个循环来覆盖任意密钥名。一个在数组上,然后一个在每个对象的键上

var nullToUndef = function (a) {
    return a.map(function (o) {
     Object.keys(o).forEach(function (key) {
       if (o[key] === null) {
         o[key] = undefined;
       }
      });
      return o;
    });
  },
  array = [
    { 
      "name": "mike",
      "age": null
    },
    { "name": "jim",
      "age": 99
    },
    {"foo": null,
    "bar": null
    }
  ];

console.log(nullToUndef(array));


nullToUndef
用于在映射函数中创建新数组,该函数用于获取每个对象上的键名列表。然后检查每个属性值是否为
null
,并在返回新数组的对象之前将
null
属性更改为
undefined

因为您说过键可能不同,所以需要执行两个循环来覆盖任意键名。一个在数组上,然后一个在每个对象的键上

var nullToUndef = function (a) {
    return a.map(function (o) {
     Object.keys(o).forEach(function (key) {
       if (o[key] === null) {
         o[key] = undefined;
       }
      });
      return o;
    });
  },
  array = [
    { 
      "name": "mike",
      "age": null
    },
    { "name": "jim",
      "age": 99
    },
    {"foo": null,
    "bar": null
    }
  ];

console.log(nullToUndef(array));


nullToUndef
用于在映射函数中创建新数组,该函数用于获取每个对象上的键名列表。然后检查每个属性值是否为
null
,并在返回新数组的对象之前将
null
属性更改为
undefined

最短的代码如下所示

array.map(a => (a.age = a.age === null ? undefined : a.age))

console.log(array)

最短的代码如下所示

array.map(a => (a.age = a.age === null ? undefined : a.age))

console.log(array)

您的预期结果是什么?..如果有有效的json会有帮助,
mike
jim
未定义。@PranavCBalanupdated@Ultimaterfair point,睡意已定,将在早上再次讨论。谢谢。您的预期结果是什么?如果有有效的json,会有帮助,
mike
jim
未定义。@PranavCBalanupdated@Ultimaterfair point,睡意已定,将在早上再次讨论。谢谢。似乎要用未定义的值替换所有“年龄”,即使它不是从null开始的OP问题:在这种情况下,用未定义的值替换null可能不清楚,不想让所有“年龄”值都未定义,只是那些原来为null的值似乎要用未定义的值替换所有“年龄”,即使它不是从nullop开始的问题:在本例中,将null替换为unfinedsorry,可能不清楚,不想让所有的“年龄”值都未定义,只是那些最初为null的值。这与我的想法非常接近。通过将'item.name===mike'切换为'item.age==null',我可以得到我想要的结果-如果您切换,我会将其标记为correct,这与我的想法非常接近。我能得到结果