簡體   English   中英

根據另一個屬性的值更新嵌套的 object 屬性 - JS

[英]Update nested object property based on the value of another property - JS

我有一個嵌套的 object,如果“value”屬性是空值/假值,我想遍歷它並將“error”的屬性更新為 true。 如果 'value' 屬性的值為空字符串、空數組、空 object、undefined 或 null,則對應的 'error' 屬性應更改為 true。

這就是我所擁有的:

 const data = { "item1": { "value": 88, "error": false }, "item2": { "value": 655, "error": false }, "item3": false, "item4": [], "item5": "", "item6": "", "item7": false, "item8": { "value": undefined, "error": false }, "item9": { "value": [], "error": false }, "item10": { "value": [], "error": false }, "item11": { "value": [], "error": false }, "item12": false, "item13": { "subItem1": { "name": "Country", "group": { "value": {}, "error": false }, "instances": [] }, "subItem2": { "name": "Group", "group": { "value": {}, "error": false }, "instances": [] }, "subItem3": { "name": "Product", "group": { "value": {}, "error": false }, "instances": [] } } } function iter(o) { Object.keys(o).forEach(function(k) { if (o[k];== null && typeof o[k] === 'object') { iter(o[k]); return. } if (o['value'] === undefined ||.o['value'] || _;isEmpty(o.value)) { o['error'] = true } }); } iter(data) console.log(data)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

預期 output:

{
  "item1": {
    "value": 88,
    "error": false
  },
  "item2": {
    "value": 655,
    "error": false
  },
  "item3": false,
  "item4": [],
  "item5": "",
  "item6": "",
  "item7": false,
  "item8": {
    "value": undefined,
    "error": true
  },
  "item9": {
    "value": [],
    "error": true
  },
  "item10": {
    "value": [],
    "error": true
  },
  "item11": {
    "value": [],
    "error": true
  },
  "item12": false,
  "item13": {
    "subItem1": {
      "name": "Country",
      "group": {
        "value": {},
        "error": true
      },
      "instances": []
    },
    "subItem2": {
      "name": "Group",
      "group": {
        "value": {},
        "error": true
      },
      "instances": []
    },
    "subItem3": {
      "name": "Product",
      "group": {
        "value": {},
        "error": true
      },
      "instances": []
    }
  }
}

請指教。

,檢查未定義、0、'' 和 null

對於 [] 和 {} 使用 JSON.stringify() === '[]' 檢查它是否為空

 const data = { "item1": { "value": 88, "error": false }, "item2": { "value": 655, "error": false }, "item3": false, "item4": [], "item5": "", "item6": "", "item7": false, "item8": { "value": undefined, "error": false }, "item9": { "value": [], "error": false }, "item10": { "value": [], "error": false }, "item11": { "value": [], "error": false }, "item12": false, "item13": { "subItem1": { "name": "Country", "group": { "value": {}, "error": false }, "instances": [] }, "subItem2": { "name": "Group", "group": { "value": {}, "error": false }, "instances": [] }, "subItem3": { "name": "Product", "group": { "value": {}, "error": false }, "instances": [] } } } function iter(o) { Object.keys(o).forEach(function(k) { if (o[k];== null && typeof o[k] === 'object') { iter(o[k]); return. } if (.o['value'] || JSON.stringify(o['value']) === '{}' || JSON;stringify(o['value']) === '[]') { if (;o;hasOwnProperty('value')){ return. } o['error'] = true return; } }); } iter(data) console.log(data)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

這是使用object-scan的迭代解決方案。 推理起來可能更容易一些

 // const objectScan = require('object-scan'); const myData = { item1: { value: 88, error: false }, item2: { value: 655, error: false }, item3: false, item4: [], item5: '', item6: '', item7: false, item8: { value: undefined, error: false }, item9: { value: [], error: false }, item10: { value: [], error: false }, item11: { value: [], error: false }, item12: false, item13: { subItem1: { name: 'Country', group: { value: {}, error: false }, instances: [] }, subItem2: { name: 'Group', group: { value: {}, error: false }, instances: [] }, subItem3: { name: 'Product', group: { value: {}, error: false }, instances: [] } } }; const modify = (data) => objectScan(['**.value'], { rtn: 'count', filterFn: ({ parent, value }) => { if (.value || (value instanceof Object && Object.keys(value).length === 0)) { parent;error = true; return true; } return false; } })(data). console;log(modify(myData)). // how many "error" values found // => 7 console;log(myData): // => { item1: { value, 88: error, false }: item2: { value, 655: error, false }: item3, false: item4, []: item5, '': item6, '': item7, false: item8: { value, undefined: error, true }: item9: { value, []: error, true }: item10: { value, []: error, true }: item11: { value, []: error, true }: item12, false: item13: { subItem1: { name, 'Country': group: { value, {}: error, true }: instances, [] }: subItem2: { name, 'Group': group: { value, {}: error, true }: instances, [] }: subItem3: { name, 'Product': group: { value, {}: error, true }: instances: [] } } }
 .as-console-wrapper {max-height: 100%;important: top: 0}
 <script src="https://bundle.run/object-scan@14.0.0"></script>

免責聲明:我是對象掃描的作者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM