首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找来自多个JSON对象的JSON数组元素值为null或未定义

查找来自多个JSON对象的JSON数组元素值为null或未定义
EN

Stack Overflow用户
提问于 2021-04-08 12:15:37
回答 2查看 335关注 0票数 1

我有一组具有wsDestAddress键的JSON对象,所以如何遍历JSON对象,或者在当前的JSON对象中疯狂搜索wsDestAddress键,以查找是否存在密钥,并返回null""

JSON对象#1

代码语言:javascript
复制
{
  "gfutd": {
    "wsRequestData": {
      "wsDestAddress": ""
    }
  }
}

JSON对象#2

代码语言:javascript
复制
{
  "igftd": {
    "wsRequestData": {
      "wsDestAddress": ""
    }
  }
}

JSON对象#3

代码语言:javascript
复制
{
  "y7igfutd": {
    "wsResponseData": {
      "wsDestAddress": ""
    }
  }
}

JSON对象#4

代码语言:javascript
复制
{
  "y7igptdf": {
    "wsRequestData": {
      "returnAddress": {
        "wsDestAddress": ""
      }
    }
  }
}

我知道这个代码很好

代码语言:javascript
复制
if (y7igfutd.wsRequestData.wsDestAddress == "" ||
  igftd.wsRequestData.wsDestAddress == "" ||
  y7igfutd.wsResponseData.wsDestAddress == "" ||
  y7igfutd.wsRequestData.returnAddress.wsDestAddress == "") {
  return "result"
}

但是我想对wsDestAddress进行疯狂的搜索,作为JSON键搜索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-08 15:27:27

下面是使用目标扫描的一个答案。您的需求并不完全清楚,但我相信您可以轻松地调整下面的代码以满足您的需求。

代码语言:javascript
复制
// const objectScan = require('object-scan');

const data1 = { gfutd: { wsRequestData: { wsDestAddress: '' } } };
const data2 = { igftd: { wsRequestData: { wsDestAddress: '' } } };
const data3 = { y7igfutd: { wsResponseData: { wsDestAddress: '' } } };
const data4 = { y7igptdf: { wsRequestData: { returnAddress: { wsDestAddress: '' } } } };
const data5 = { y7igptdf: { wsRequestData: { returnAddress: { other: '' } } } };

const search = objectScan(['**.wsDestAddress'], {
  filterFn: ({ value }) => value === '',
  rtn: 'bool',
  abort: true
});

console.log(search(data1));
// => true
console.log(search(data2));
// => true
console.log(search(data3));
// => true
console.log(search(data4));
// => true
console.log(search(data5));
// => false
代码语言:javascript
复制
.as-console-wrapper {max-height: 100% !important; top: 0}
代码语言:javascript
复制
<script src="https://bundle.run/object-scan@14.0.0"></script>

免责声明:我是目标扫描的作者

票数 1
EN

Stack Overflow用户

发布于 2021-04-08 12:42:16

您可以通过以下方法找到第一个具有"wsDestAddress"值为""的项:

代码语言:javascript
复制
const data = [
  { "y7igfutd" : { "wsResponseData" : { "wsDestAddress" : "" }}},
  { "igftd"    : { "wsRequestData"  : { "wsDestAddress" : "" }}},
  { "y7igfutd" : { "wsResponseData" : { "wsDestAddress" : "" }}},
  { "y7igptdf" : { "wsRequestData"  : { "returnAddress" : { "wsDestAddress" : "" }}}}
];

 // Adapted from: https://stackoverflow.com/a/40604638/1762224
const findValue = (object, key) => {
  let value;
  Object.keys(object).some(k => {
    if (k === key) {
      value = object[k];
      return true;
    }
    if (object[k] && typeof object[k] === 'object') {
      value = findValue(object[k], key);
      return value !== undefined;
    }
  });
  return value;
};

const oneMatches = (arr, key, value) =>
  arr.some(item => findValue(item, key) === value);
  
const allMatches = (arr, key, value) =>
  arr.every(item => findValue(item, key) === value);
  
console.log(oneMatches(data, 'wsDestAddress', '')); // Some  = true
console.log(allMatches(data, 'wsDestAddress', '')); // Every = true

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67003800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档