繁体   English   中英

如何在 NodeJS 中更新 JSON 中的值并过滤以排除值?

[英]How to update value in JSON in NodeJS and filter to exclude values?

var data = [{
   "description" : "sample",
   "link" : "mylink",
   "id" :"1",
   "deviceName":"mydevice1"
},
{
   "description" : "sample",
   "link" : "mylink",
   "id" :"1",
   "deviceName":"mydevice1"
},
{
   "description" : "sample",
   "link" : "mylink",
   "id" :"",
   "deviceName":""
}]

我如何将"deviceName"=""为空的deviceName更新为在我的 JSON 对象中指定的novaluespecified

笔记

最初它是一个巨大的数组,所以我不能为 1 个单一索引做到这一点

此外,我需要过滤掉所有名为device1设备,并且不包括在我搜索的最终 JSON 中,我发现.filter用于包含但找不到用于排除某些内容的函数

编辑

我宁愿不使用 jquery,如果可能的话,完全用 NodeJS 来做.. 任何帮助表示赞赏:)

如果绝对需要,我不介意使用 jquery

您可以在下面尝试希望它有帮助。首先我使用Array.map来转换 deviceName 为空string的值。 接下来我使用带有indexOF 的数组过滤器来过滤掉值。

 var data = [{ "description": "sample", "link": "mylink", "id": "1", "deviceName": "mydevice1" }, { "description": "sample", "link": "mylink", "id": "1", "deviceName": "mydevice1" }, { "description": "sample", "link": "mylink", "id": "", "deviceName": "" } ] let _res = data.map(ele => { if (ele.deviceName == "") { ele.deviceName = "novaluespecified" } return ele; }) console.log(_res) // filtering out device1 var data2 = [{ "description": "sample", "link": "mylink", "id": "1", "deviceName": "mydevice1" }, { "description": "sample", "link": "mylink", "id": "1", "deviceName": "mydevice1" }, { "description": "sample", "link": "mylink", "id": "", "deviceName": "" } ] let _res1 = data2.filter(ele => { if (ele.deviceName.indexOf('device1') == -1) { return ele; } }) console.log(_res1)

你可以这样试试:

var updatedData = data.map(item => item.deviceName == '' ? { ...item, deviceName: 'novaluespecified'} : {...item} )

输出:

[ { description: 'sample',
    link: 'mylink',
    id: '1',
    deviceName: 'mydevice1' },
  { description: 'sample',
    link: 'mylink',
    id: '1',
    deviceName: 'mydevice1' },
  { description: 'sample',
    link: 'mylink',
    id: '',
    deviceName: 'novaluespecified' } ]

要过滤,您可以执行以下操作:

data.filter(item => item.deviceName !== 'device1')

您可以使用reduce函数仅在一个循环中生成所需的输出。

 let data = [{"description" : "sample","link" : "mylink","id" :"1","deviceName":"mydevice1"},{"description" : "sample","link" : "mylink","id" :"1","deviceName":"mydevice1"},{"description" : "sample","link" : "mylink","id" :"","deviceName":""}], result = data.reduce((a, {deviceName, ...rest}) => { if(deviceName !== "mydevice1") a.push(Object.assign({}, rest, {deviceName: deviceName.trim() === "" ? "novaluespecified" : deviceName})); return a; } , []); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM