[英]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#shift
和Array#foreach
Object.keys
將obj轉換為數組 Array#shift
刪除數組的第一個索引 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
循環遍歷對象並使用shift
和delete
如下所示:
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.