我正在尝试根据输入字段中输入的数字过滤月份。
例如,如果我在输入字段中输入'5',它应该过滤'May'。
我的数组是:
items = [
{0: 'Jan'},
{1: 'Feb'},
{2: 'Mar'},
{3: 'Apr'},
{4: 'May'},
.
.
.
{11: 'Dec}'
]
我正在通过这种方式尝试,但无法解决问题
const inputText= '5';
const filteredMonths = items.filter(item => {
return (Object.keys(item).find(key =>
item[key] && item[key].toString().toLowerCase().includes(inputText))
});
所以,如果我输入 5 ,在filteredMonths中,应该有1个元素“March”。
答案 0 :(得分:1)
如果您想为此使用过滤器,您可以通过检查条目是否具有您的键值来实现:
const inputText = '5';
const key = parseInt(inputText) - 1; // Because your key is a number and because you associated May with 4, not 5
const result = items.filter(item => item[key]); // returns [{4: 'may'}]
如果你希望结果只包含值,你可以使用map:
const result = items
.filter(item => item[key]) // returns [{4: 'may'}]
.map(item => item[key]); // returns ['may']
然而,我真的不明白你为什么不使用字符串数组:
const items = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
const result = items[key]; // returns 'may'
答案 1 :(得分:0)
你可以这样做。
const inputText= '5';
const filteredMonths = items.filter(obj => (inputText - 1) in obj)
console.log(filteredMonths[0][inputText-1]) //May
答案 2 :(得分:0)
试试这个:
my_media_ep
答案 3 :(得分:0)
您在此处并不特别需要 filter
。您可以简单地使用索引访问密钥:
const month = items[parseInt(inputText)][parseInt(inputText)];
您需要做的就是确保 inputText 始终是对象中存在的键,否则您会得到 undefined
必须处理的结果。
答案 4 :(得分:0)
感谢大家的快速建议,但就我而言,我能够通过使用:
const inputText = searchText.toString().toLowerCase();
const filteredList = items.filter((item, key) => {
return (key+1).toString().toLowerCase() === inputText
});
我使用过滤器索引作为键,因为无论如何,它没有按照迭代正确获取对象的键。