如何通过检查元素的键来过滤数组中的元素

时间:2021-03-31 20:55:28

标签: angular typescript

我正在尝试根据输入字段中输入的数字过滤月份。

例如,如果我在输入字段中输入'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”。

5 个答案:

答案 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
    });

我使用过滤器索引作为键,因为无论如何,它没有按照迭代正确获取对象的键。

相关问题