簡體   English   中英

需要在特定索引處重疊數組的子數組

[英]Need to overlap subarray of a array at particular indexes

根據通過選擇的另一個數組提供的索引,從以下數組生成另一個數組。 以下數組

array =[`0: Array(2)
    0:
      disable: false
      label: "label0" 
    1: 
      disable: false
      label: "label1" 

1: Array(2)
    0:
      disable: false
      label: "label0" 
    1: 
      disable: true
      label: "label1" 

2: Array(2)
    0:
      disable: true
      label: "label0" 
    1: 
      disable: false
      label: "label1"  

3: Array(2)
    0:
      disable: false
      label: "label0" 
    1: 
      disable: true
      label: "label1"]  

現在,當selected = [2,3]數組selected = [2,3] 禁用真實數據陣列應被賦予優先級。 然后結果數組應該是

`0:
  disable: true
  label: "label0" 
1: 
  disable: true
  label: "label1" `

類似地,當selected = [0,1]數組selected = [0,1] ,結果應為

   0:
      disable: false
      label: "label0" 
    1: 
      disable: true
Edit:label: "label1" 

編輯:對不起,我忘了提及這一點。 到目前為止,我已經嘗試過

 checked=[2,3] arrayData=[ [ { "label": "label1", "disable": true }, { "label": "label2", "disable": false }, ], [ { "label": "label1", "disable": false }, { "label": "label2", "disable": false }, ], [ { "label": "label1", "disable": true }, { "label": "label2", "disable": false }, ] ] const result=this.checked .map(indexAtArrayData => { const element = this.arrayData[indexAtArrayData]; const resData=[] if (element) { for (var i=0;i<element.length;i++) { resData[i]={label:element[i].label}; if (element[i].disable || typeof resData[i]['disable'] == 'undefined') { resData[i].disable=element[i].disable; } } return resData; } });console.log(result); 

我已經嘗試了上面的代碼並獲得了結果,但是我正在尋找一種更整潔的方式。

您可以獲取帶有對象的第一個所需數組的副本,並在必要時disable更新。

 var array = [[{ disable: false, label: "label0" }, { disable: false, label: "label1" }], [{ disable: false, label: "label0" }, { disable: true, label: "label1" }], [{ disable: true, label: "label0" }, { disable: false, label: "label1" }], [{ disable: false, label: "label0" }, { disable: true, label: "label1" }]], selected = [2, 3], result = selected.reduce((r, i) => { if (!r) { return array[i].map(o => Object.assign({}, o)); // take copy } array[i].forEach((o, j) => r[j].disable = r[j].disable || o.disable); // update disable return r; }, undefined); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

如果我正確理解這一點,則所選數組代表原始數組的索引,並且在原始數組的每個所選元素上,您都想要選擇第一個設置為disable的元素,然后選擇其他第一個元素。

解決方案如下所示:

selectedArray
  .map(indexAtArrayData => {
    const element = arrayData[indexAtArrayData];
    if (element) {
      for (let entry of element) {
        if (entry.disable) {
          return entry;
        }
      }
      return element[0];
    }
  });
function processData(arr, selected) {
  let processedArray = [];
  selected.map(index => {
    const element = arr[index];
    if (element) {
      for (let entry of element) {
        let processedEntry = {
          label: entry.label
        };

        if (entry.disable || entry.disable === undefined) {
          processedEntry.disable = true;
        }

        processedArray.push(processedEntry);
      }
    }
  });

return processedArray;
}

這是jsfiddle的鏈接

暫無
暫無

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

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