我有一個這樣的陣列:
const data = [
{"id": 3, "value": "a"},
{"id": 3, "value": "b"},
{"id": 4, "value": "a"},
{"id": 8, "value": "d"},
{"id": 1, "value": "d"},
{"id": 2, "value": "d"},
{"id": 5, "value": "z"},
{"id": 8, "value": "h"},
{"id": 8, "value": "b"},
]
并想洗掉所有物件,其中其他物件之一的值不相同。所以,最后我想要:
[
{"id": 3, "value": "a"},
{"id": 4, "value": "a"},
{"id": 3, "value": "b"},
{"id": 8, "value": "b"},
{"id": 1, "value": "d"},
{"id": 2, "value": "d"},
]
我嘗試了幾個版本。如何檢查您不知道它是否存在的東西(稍后在回圈中)?如果我確實在回圈中檢查串列,我在角落里跑,陣列本身在 for 回圈期間改變了它的長度......有沒有簡單的方法?
謝謝你的幫助!
uj5u.com熱心網友回復:
你可以像這樣實作它:-
const data = [
{"id": 3, "value": "a"},
{"id": 3, "value": "b"},
{"id": 4, "value": "a"},
{"id": 8, "value": "d"},
{"id": 1, "value": "d"},
{"id": 2, "value": "d"},
{"id": 5, "value": "z"},
{"id": 8, "value": "h"},
{"id": 8, "value": "b"},
]
let reqOutput = [];
for (let i = 0; i < data.length; i ) {
if (data[i].value == "a") {
reqOutput.push(data[i]);
}
}
for (let i = 0; i < data.length; i ) {
if (data[i].value == "b") {
reqOutput.push(data[i]);
}
}
for (let i = 0; i < data.length; i ) {
if (data[i].value == "d") {
reqOutput.push(data[i]);
}
}
console.log(reqOutput);
uj5u.com熱心網友回復:
您需要在陣列中傳遞兩次:第一個將計算每個值的數量,第二個將洗掉具有單獨值的物件:
function removeLoneValues(data) {
const values = {}
data.forEach(datum => {
if (values[datum.value] === undefined) {
values[datum.value] = 0
}
values[datum.value]
})
data.filter(datum => {
return values[datum.value] > 1
})
return data
}
uj5u.com熱心網友回復:
您可以使用Array.prototype.indexOfandArray.prototype.lastIndexOf和Array.prototype.filterandArray.prototype.map來實作這一點:
const data = [
{"id": 3, "value": 'a'},
{"id": 3, "value": 'b'},
{"id": 4, "value": 'a'},
{"id": 8, "value": 'd'},
{"id": 1, "value": 'd'},
{"id": 2, "value": 'd'},
{"id": 5, "value": 'z'},
{"id": 8, "value": 'h'},
{"id": 8, "value": 'b'},
];
const values = data.map((el) => el.value);
const nonUniqueData = data.filter((el) => values.indexOf(el.value) !== values.lastIndexOf(el.value));
console.log(nonUniqueData);
此代碼首先創建唯一值的映射陣列,然后通過檢查的結果indexOf和lastIndexOf發現的映射陣列中的值時是不同的,我們可以檢查陣列是不是唯一的。然后在過濾器函式中使用此啟發式方法來創建data陣列的新版本,其中洗掉了包含唯一值的所有元素。
如果您需要根據陣列的值對陣列進行排序,您可以Array.prototype.sort根據您的值進行排序。我在這里將它們轉換為字串,因此代碼片段將運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358398.html
標籤:javascript 数组
