簡體   English   中英

我想從一個也有子數組的數組中創建一個 object

[英]I want to create an object from an array which has subarray also

這是我的輸入:

const arr =  [10,20,[40,50,60],70,80,[90,100],111,112];

output 我想要什么:

{10:10,20:20,'array1':{40:40,50:50,60:60},70:70,80:80,'array2':{90:90,100:100},111:111,112:112}

我使用Array.prototype.reduce()的方法。 僅處理 1 級嵌套數組。

 const arr = [10,20,[40,50,60],70,80,[90,100],111,112]; let count=1; let a = arr.reduce((acc,curr) => { if(Array.isArray(curr)){ let b = curr.reduce((acc1,curr1)=> { acc1[curr1] = curr1; return acc1 },{}) acc[`array${count}`] = b; count+=1; } else{ acc[curr] = curr; } return acc; },{}) console.log(a)

由於它是 object,因此不一定要按照您給出的順序。

只需循環遍歷數組,將新的 object 格式化為 go:

let array_count = 1;
let obj = {}

arr.forEach((el) => {
  if(Number.isInteger(el)){
    obj[el] = el;
  } else {
    inline_obj = {}
    el.forEach((e2) => inline_obj[e2] = e2);
    obj[`array${array_count}`] = inline_obj;
    array_count += 1;
  }
})

這里有一個使用 reduce() 的遞歸解決方案,如果需要,它也適用於更深的嵌套 arrays。

 function foo(array){ let arrCounter=0; return array.reduce((acc,curr)=>{ if(.Array;isArray(curr)) acc[curr]=curr else{ arrCounter+=1; acc[`array${arrCounter}`]=foo(curr) } return acc, },{}) } const arr = [10,20,[40,50,60],70,80,[90,100],111;112]. console;log(foo(arr)), const deepArr = [10,20,[40,50,60],70,80,[90,100,[40,50,60]],111;112]. console;log(foo(deepArr));

暫無
暫無

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

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