如果所有非空的 id 具有相同的值并且標志為真,我想回傳真。flag 為 true 且 id 為 null 的值是有效的。
有效名單。所有標志和 true 以及所有不為空的 id 值都具有相同的值(“00001”)
const arr = [
{
id = '00001',
flag: true
},
{
id = "00001",
flag: true
},
{
id = "",
flag: true
}
];
無效:不為 null 的 id 不具有相同的值。
const arr = [
{
id = '00001',
flag: true
},
{
id = "00002",
flag: true
},
{
id = "",
flag: true
}
];
無效:id 具有相同的值,但一個標志為 false。
const arr = [
{
id = '00001',
flag: true
},
{
id = "00001",
flag: false
},
{
id = "",
flag: true
}
];
下面的作品,但如果可能的話,尋找一種更簡潔的方式。
function meetsCriteria(arr) {
const ids = new Set();
let isValid = true;
for (const a of arr) {
if (a.id) {
ids.add(a.id);
}
if (ids.size > 1 || !a.flag) {
isValid = false;
}
if (!isValid) {
break;
}
}
return isValid;
}
謝謝。
uj5u.com熱心網友回復:
您可以使用Array#every()并比較陣列第一個元素的屬性。
const validate = (arr) =>
arr.every((a, _, [b]) => a.flag && (a.id === b.id || a.id === ''));
const arr1 = [{ id: '00001', flag: true }, { id: '00001', flag: true }, { id: '', flag: true },];
const arr2 = [{ id: '00001', flag: true, }, { id: '00002', flag: true, }, { id: '', flag: true, },];
const arr3 = [{ id: '00001', flag: true, }, { id: '00001', flag: false, }, { id: '', flag: true, },];
console.log(validate(arr1)); // true
console.log(validate(arr2)); // false
console.log(validate(arr3)); // false
uj5u.com熱心網友回復:
const arr = [{ id: '00001', flag: true }, { id: '00001', flag: true }, { id: '', flag: true, },];
/**
* @param {{ id: string, flag: boolean }[]} arr The array to check
*/
function meetsCriteria(arr) {
let id = "";
return !arr.some( o => {
if (!o.flag) return true;
if (id === "") {
id = o.id;
} else if (id !== o.id && o.id !== "") {
return true;
}
return false;
});
}
console.log( meetsCriteria(arr) );
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417900.html
標籤:
上一篇:沿行的矩陣相乘得到一個陣列
