需要在特定索引处重叠数组的子数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要在特定索引处重叠数组的子数组相关的知识,希望对你有一定的参考价值。
根据通过选择的另一个数组提供的索引,从以下数组生成另一个数组。以下数组
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);
我已经尝试了上面的代码并取得了结果,但我正在寻找一种更简洁的方法。
答案
您可以获得带有对象的第一个想要的数组的副本,并在必要时更新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; }
另一答案
如果我理解正确,则所选数组表示原始数组的索引,并且在原始数组的每个选定元素中,您要选择第一个元素设置为禁用,第一个元素设置为其他元素。
这就是解决方案的样子:
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的链接
以上是关于需要在特定索引处重叠数组的子数组的主要内容,如果未能解决你的问题,请参考以下文章
2021-07-16:三个无重叠子数组的最大和。给定数组 nums 由正整数组成,找到三个互不重叠的子数组的最大和。每个子数组的长度为k,我们要使这3*k个项的和最大化。返回每个区间起始索引的列表(索