[英]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.