簡體   English   中英

Javascript數據轉換

[英]Javascript data transformation

輸入:

     {
    "8": [{
        "a": true,
        "b": {
            "xyz": 1
        }
    }, {
        "a": false,
        "b": {
            "xyz": 2
        }
    }],
    "13": [{
        "b": {
            "xyz": 4
        }
    }]
 }

輸出:

    {
    "8": [{
        "b": {
            "xyz": 2
        }
    }]
 }

如何刪除每個鍵的第一個元素並使用javascript和lodash庫返回同一個對象的幾個鍵?

如果沒有loadash,請使用Array#shiftArray#foreach

  1. 首先使用Object.keys將obj轉換為數組
  2. 然后循環該值。並使用Array#shift刪除數組的第一個索引
  3. 然后應用條件,數組長度為0,從主對象中刪除鍵值對

 var obj = { "8": [{ "a": true, "b": { "xyz": 1 } }, { "a": false, "b": { "xyz": 2 } }], "13": [{ "b": { "xyz": 4 } }] }; Object.keys(obj).forEach(a => { obj[a].shift() obj[a] = obj[a]; if(obj[a].length == 0) delete obj[a]; }); console.log(obj) 

您可以使用reduce Object.entries()返回的條目,如下所示:

 let obj={"8":[{"a":!0,"b":{"xyz":1}},{"a":!1,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]} let output = Object.entries(obj).reduce((acc, [key, value]) => { if(value.length > 1) acc[key] = value.slice(1) return acc; }, {}) console.log(output) 

如果你想改變原始對象,使用for...in循環遍歷對象並使用shiftdelete如下所示:

 let obj={"8":[{"a":!0,"b":{"xyz":1}},{"a":!1,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]} for (let key in obj) { obj[key].shift() if (obj[key].length === 0) delete obj[key] } console.log(obj) 

使用lodash_.flow()_.partialRight()創建一個函數,將值映射到每個數組的尾部(除第1個之外的所有項),然后使用_.omitBy()刪除空鍵:

 const { flow, partialRight: pr, mapValues, tail, omitBy, isEmpty } = _ const fn = flow( pr(mapValues, tail), pr(omitBy, isEmpty) ) const data = {"8":[{"a":true,"b":{"xyz":1}},{"a":false,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]} const result = fn(data) console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script> 

和terser lodash / fp版本:

 const { flow, mapValues, tail, omitBy, isEmpty } = _ const fn = flow( mapValues(tail), omitBy(isEmpty) ) const data = {"8":[{"a":true,"b":{"xyz":1}},{"a":false,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]} const result = fn(data) console.log(result) 
 <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script> 

暫無
暫無

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

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