我試圖通過使用將一個陣列與另一個陣列中的值進行比較來從一個陣列中找到最小的公倍數% num === 0。答案應該是 6,但是因為第一個陣列中的每個數字都至少為真一次,所以它們都會被回傳。我如何找到只有真而不假的值?
let arr = [1, 2, 3]
function test(arr) {
let x = [1, 2, 3, 4, 5, 6, 7, 8]
for (let n of arr) {
return x.filter(k => k % n === 0)
}
}
console.log(test(arr))
uj5u.com熱心網友回復:
您需要遍歷陣列并回傳第x一個除以every.arr
let arr = [1, 2, 3];
function test(arr) {
let x = [1, 2, 3, 4, 5, 6, 7, 8];
for (let n of x) {
if (arr.every((a) => n % a === 0)) {
return n;
}
}
}
console.log(test(arr));
您也可以簡單地使用Array.prototype.find解決方案。
const
arr = [1, 2, 3],
test = (arr) =>
[1, 2, 3, 4, 5, 6, 7, 8].find((n) => arr.every((a) => n % a === 0));
console.log(test(arr));
注意:如果x未排序,則必須先對其進行排序。
const arr = [1, 2, 3],
test = (arr) =>
[8, 7, 6, 5, 4, 3, 2, 1]
.sort((a, b) => a - b)
.find((n) => arr.every((a) => n % a === 0));
console.log(test(arr));
根據 OP 的評論更新
您可以使用Array.prototype.filter和Array.prototype.some。
const arr = [1, 2, 3],
test = (arr) =>
[1, 2, 3, 4, 5, 6, 7, 8].filter((n) => arr.some((a) => n / a === 2));
console.log(test(arr));
uj5u.com熱心網友回復:
如果 x 已排序,則可以使用find和every
let arr = [1, 2, 3]
let x = [1, 2, 3, 4, 5, 6, 7, 8, 12]
let res = x.find(n => arr.every(a => n%a === 0))
console.log(res)
如果未排序 x
let arr = [1, 2, 3]
let x = [1, 12, 6, 4, 2, 7, 8]
let res = [...x].sort((a,b)=> a-b).find(n => arr.every(a => n%a === 0))
console.log(res)
uj5u.com熱心網友回復:
過濾和相交
let arr = [1, 2, 3]
let x = [1, 2, 3, 4, 5, 6, 7, 8]
function test(arr) {
let common = []
arr.forEach(n => common.push(x.filter(k => k % n === 0)))
return common.reduce((acc, cur) => acc.filter(e => cur.includes(e)));
}
console.log(test(arr))
uj5u.com熱心網友回復:
遲到的派對答案
您可以使用Array.reduce用一行代碼解決這個問題。在這里,我們用一個空陣列對其進行初始化,然后使用三元運算子附加通過余數測驗的值。請注意,我們不需要檢查零(c % n === 0),因為我們將結果視為布林值。
x.reduce((p,c) => c % n ? p : p.concat([c]), [])
// TEST
const x = [1, 2, 3, 4, 5, 6, 7, 8];
[1, 2, 3].forEach(n => {
console.log(
"n =" n,
x.reduce((p,c) => c % n ? p : p.concat([c]), [])
);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480428.html
標籤:javascript 数组
