我嘗試items按鍵過濾物件陣列fields:
const items = [{id: 1, name: "OP"}];
const fields = ['id', 'name'];
const value = 1;
return items.filter((singleItem) => {
fields.forEach((field) => {
singleItem[field].toLowerCase().includes(value.toLowerCase())
})
})
但是如何將找到的結果回傳給過濾器?
uj5u.com熱心網友回復:
的理想用例Array#find。此外,return您的代碼段中缺少關鍵字。
我曾經在呼叫方法之前toString()將所有輸入轉換為string,toLowerCase因為它不適用于Number.
let items = [{
id: 1,
name: "abc"
}, {
id: 2,
name: "xyz"
}];
let fields = ['id', 'name'];
let value = 'xyz';
let op = items.filter((singleItem) => {
return fields.find((field) => singleItem[field].toString().toLowerCase().includes(value.toLowerCase()))
});
console.log(op);
uj5u.com熱心網友回復:
您可以使用some():
const items = [{id: 1, name: "OP"}];
const fields = ['id', 'name'];
const value = 1;
const result = items.filter(item =>
fields.some(field =>
('' item[field]).toLowerCase().includes(('' value).toLowerCase())));
console.log(result);
考慮到您的原始邏輯有大小寫轉換和對 的呼叫includes(),我將通過附加到''.
從 DRY 的角度來看,將規范化拆分為一個單獨的函式可能會更好:
const items = [{id: 1, name: "OP"}];
const fields = ['id', 'name'];
const value = 1;
const canonicalize = (x) => ('' x).toLowerCase();
const result = items.filter(item =>
fields.some(field =>
canonicalize(item[field]).includes(canonicalize(value))));
console.log(result);
uj5u.com熱心網友回復:
您可以使用some(或者可能every取決于您所需的輸出)。
[
some] 如果在陣列中找到一個元素,提供的函式為其回傳真值,則回傳真值;否則回傳false。
而不是includes我會使用直接比較。此外,您無法撥打toLowerCase號碼。您可以將其強制轉換為字串,然后根據小寫值檢查它,但在本示例中,我將其忽略了。我認為您傳遞給函式的值應該是您在物件中查找的正確型別。
const items = [{id: 1, name: 'OP'},{id: 2, name: 'OP'}];
const fields = ['id', 'name'];
function fn(value) {
return items.filter(item => {
return Object.values(item).some(v => {
return v === value;
});
})
}
console.log(fn(1));
console.log(fn('1'));
console.log(fn('OP'));
附加檔案
Object.values
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/339794.html
標籤:javascript
上一篇:我想點擊一個單選按鈕
