我正在嘗試將元素陣列與二維陣列的元素進行比較。如果找到匹配項,則該行 2D 元素的計數將增加。我設法用二維陣列的第一行做到了,但是我不知道如何讓代碼繼續檢查二維陣列的下一行。
var fruits=[
['apple', 'banana', 'mango'],
['grape', 'pineapple', 'blueberry'],
['strawberry', 'mangosteen']
];
var fruit_i_like=[
['grape', 'banana', 'pineapple']
];
//if found match from the first row of fruits, increment this var
var fruit1_count = 0;
//if found match from the second row of fruits, increment this var
var fruit2_count = 0;
//if found match from the third row of fruits, increment this var
var fruit3_count = 0;
for (var i = 0; i < fruit_i_like.length; i ) {
for (var j = 0; j < fruits.length; j ){
if (fruits[j].indexOf(fruit_i_like[i]) > -1) {
fruit1_count ;
}
}
}
預期的結果應該是列印fruit_i_like 陣列與陣列fruits 的每一行的匹配次數。例如,這里fruit1_count 為1,fruit2_count 為2,fruit3_count 為0。
有沒有辦法使用純 JS 來檢查其他行?謝謝!
uj5u.com熱心網友回復:
在這種情況下,使用陣列可能比使用變數更好,因此您不必對名稱和定義進行硬編碼。在這種情況下,您將從陣列的末尾獲得每個水果計數的有序串列,按照您最初將它們放入fruits陣列的順序(也不知道為什么fruit_i_like是二維的)。
var fruits = [
['apple', 'banana', 'mango'],
['grape', 'pineapple', 'blueberry'],
['strawberry', 'mangosteen']
];
var fruit_i_like = [
['grape', 'banana', 'pineapple']
];
let fruitCounts = [];
fruits.forEach((fruitsList, i) => {
fruitCounts.push(0);
fruit_i_like[0].forEach(likedFruit => {
if (fruitsList.includes(likedFruit)) {
fruitCounts[i] ;
}
});
});
fruitCounts.forEach((count, i) => {
console.log(`Fruit count ${i} = ${count}`);
});
uj5u.com熱心網友回復:
1)您可以使用Set簡單的for回圈輕松實作結果。您可以首先創建一個屬性物件,其中您想要的計數為:
const obj = {
fruit1_count: 0,
fruit2_count: 0,
fruit3_count: 0,
};
var fruits = [
["apple", "banana", "mango"],
["grape", "pineapple", "blueberry"],
["strawberry", "mangosteen"],
];
var fruit_i_like = [["grape", "banana", "pineapple"]];
const obj = {
fruit1_count: 0,
fruit2_count: 0,
fruit3_count: 0,
};
const set = new Set(fruit_i_like[0]);
for (let i = 0; i < fruits.length; i) {
const arr = fruits[i];
for (let j = 0; j < arr.length; j) {
if (set.has(arr[j])) obj[`fruit${i 1}_count`] ;
}
}
const { fruit1_count, fruit2_count, fruit3_count } = obj;
console.log(fruit1_count);
console.log(fruit2_count);
console.log(fruit3_count);
2)你也可以在這里使用reduce和forEach:
顯示代碼片段
var fruits = [
["apple", "banana", "mango"],
["grape", "pineapple", "blueberry"],
["strawberry", "mangosteen"],
];
var fruit_i_like = [["grape", "banana", "pineapple"]];
const obj = {
fruit1_count: 0,
fruit2_count: 0,
fruit3_count: 0,
};
const set = new Set(fruit_i_like[0]);
const resultObj = fruits.reduce((acc, curr, i) => {
curr.forEach((o) => {
if (set.has(o)) acc[`fruit${i 1}_count`] ;
});
return acc;
}, obj);
const { fruit1_count, fruit2_count, fruit3_count } = resultObj;
console.log(fruit1_count);
console.log(fruit2_count);
console.log(fruit3_count);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383203.html
標籤:javascript 数组
上一篇:javascript中的indexOf()型別敏感嗎?
下一篇:使numpy陣列的負值變為正值
