1. 程式人生 > 程式設計 >JS一維陣列轉化為三維陣列的實現示例

JS一維陣列轉化為三維陣列的實現示例

今天在CSDN上問答區看到一個提問的小夥伴,是想要將一維陣列轉化為三位陣列的需http://www.cppcns.com求,正好不是很忙,樂於助人的我立馬給這位同學安排上,當然也沒有顧及那麼多去看資料什麼的,就直接按照自己的思路走了!下方有原始碼http://www.cppcns.com

在這裡插入圖片描述

上面是他的資料格式,下面呢是要轉化的資料格式

在這裡插入圖片描述

話不多說直接上程式碼

 let arr = [{
      'peovince': 'a','city': 'b','area': 'c'
    },{
      'peovince': 'a','area': 'd'
    },'city': 'e','area': 'f'
    },'area': 'g'
    },{
      'peovince': 'o','city': 'p','area': 'q'
    },'area': 'r'
    },'city': 's','area': 't'
    },'area': 'v'
    }];

開始轉化

let list = Array.from(new Set(
      arr.map(item => {
        return item['peovince']
      })))
    let subList = []
    list.forEach(res => {
      arr.forEach(ele => {
        if (ele['peovince'] === res) {
          let nameArr = subList.map(item => item.value)
          if (nameArr.indexOf(res) !== -1) {
            let nameArr2 = subList[nameArr.indexOf(res)].children.map(item => item.value)
            if (nameArr2.indexOf(ele['city']) !== -1) {
              subList[nameArr.indexOf(res)].children[nameArr2.indexOf(ele['city'])].children.push({
                value: ele['area'],label: ele['area'],})
            } else {
              subList[nameArr.indexOf(res)].children.push({
                value: ele['city'],label: ele['city'],children: [{
                  value: ele['area'],}]
              })
            }
          } else {
            subList.push({
              value: res,label: res,children: [{
                value: ele['city'],}]
              }]
            })
          }
        }
      })

    })
    console.log(subList)

最後列印的subList就是想要的格式了,讓我們看一下列印

ps:一維陣列轉二維陣列

第一種情況:數組裡面是字串的時候

  let array = [1,2,3,4,5,6,7,8];
  len len = array.length;
  let nwww.cppcns.com = 4; //假設每行顯示4個
  let lineNum = len % n === 0 ? len / n : Math.floor( (len / n) + 1 );
  let res = [];
  for (let i = 0; i < lineNum; i++) {
    // slice() 方法返回一個從開始到結束(不包括結束)選擇的陣列的一部分淺拷貝到一個新陣列物件。且原始陣列不會被修改。
    let temp = array.slice(i*n,i*n+n);
    res.push(temp);
  }
  console.log(res);

http://www.cppcns.com二種情況:數組裡面是物件的時候

當陣列元素為物件的時候,就不能使用slice方法進行截取了,因為slice屬於淺拷貝,導致的問題就是你修改了新生成的陣列物件值,會影響原始陣列中物件的值。
這裡就介紹一種通過ON.stringify和JSON.parse方法。

  let objArray = [{a: 1},{b: 2},{c: 3},{d: 4},{e: 5},{f: 6},{g: 7}];
  let len = objArray.length;
  let n = 4; //假設每行顯示4個
  let lineNum = len % 4 === 0 ? len / 4 : Math.floor( (len / 4) + 1 );
  let res = [];
  for (let i = 0; i < lineNum; i++) {
    let temp = objArray.slice(i*n,i*n+n);
    res.push(JSON.parse(JSON.stringify(temp)));
  }
  console.log(res);


到此這篇關於JS一維陣列轉化為三維陣列的文章就介紹到這了,更多相關JS一維陣列轉化為三維陣列內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!