需要在特定索引处重叠数组的子数组

问题描述 投票:1回答:3

根据通过选择的另一个数组提供的索引,从以下数组生成另一个数组。以下数组

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]。应该优先使用disable true数据数组。然后结果数组应该是

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

类似地,当数组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);

我已经尝试了上面的代码并取得了结果,但我正在寻找一种更简洁的方法。

javascript arrays vuejs2
3个回答
2
投票

您可以获得带有对象的第一个想要的数组的副本,并在必要时更新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; }

0
投票

如果我理解正确,则所选数组表示原始数组的索引,并且在原始数组的每个选定元素中,您要选择第一个元素设置为禁用,第一个元素设置为其他元素。

这就是解决方案的样子:

selectedArray
  .map(indexAtArrayData => {
    const element = arrayData[indexAtArrayData];
    if (element) {
      for (let entry of element) {
        if (entry.disable) {
          return entry;
        }
      }
      return element[0];
    }
  });

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的链接

© www.soinside.com 2019 - 2024. All rights reserved.