按对象属性过滤对象数组

时间:2019-05-11 17:40:20

标签: javascript reactjs

我有对象数组

const countryList =  [
    { name: 'Afghanistan', id: 'AF' },
    { name: 'Åland Islands', id: 'AX' },
    { name: 'Albania', id: 'AL' },
    { name: 'Algeria', id: 'DZ' }]

我想通过对象“ id”过滤数组并获取名称

这是我已经做过的并且正在运行

getName = (id) => {
    let name=[]
    for (var i = 0; i < countryList.length ; i++) {
        if (countryList[i].id === id) {
            name.push(countryList[i]);                
        } 
    }
    console.log(name[0].name)
}

还有更好的方法吗?

6 个答案:

答案 0 :(得分:1)

如果id是唯一的,则可以找到名称,并将未知对象作为默认对象。

const
    getName = id => (countryList.find(o => o.id === id) || {}).name,
    countryList = [{ name: 'Afghanistan', id: 'AF' }, { name: 'Åland Islands', id: 'AX' }, { name: 'Albania', id: 'AL' }, { name: 'Algeria', id: 'DZ' }];

console.log(getName('AL'));
console.log(getName('UK'));

答案 1 :(得分:0)

您可以使用find()获取对象,然后返回该对象的name

const countryList = [ { name: 'Afghanistan', id: 'AF' }, { name: 'Åland Islands', id: 'AX' }, { name: 'Albania', id: 'AL' }, { name: 'Algeria', id: 'DZ' } ]
const getName = id => (countryList.find(x => x.id === id) || {}).name

console.log(getName('AX'))
console.log(getName('DZ'))

答案 2 :(得分:0)

您可以使用find数组方法:

const countryList =  [
    { name: 'Afghanistan', id: 'AF' },
    { name: 'Åland Islands', id: 'AX' },
    { name: 'Albania', id: 'AL' },
    { name: 'Algeria', id: 'DZ' }];
    
    
getName = (id) => {
  let country = countryList.find(c=>c.id === id);
  return country !== undefined
     ? country.name
     : 'not found';
}

console.log(getName('DZ'));
    
    

请注意,getName现在返回一个字符串,并且没有像在控制台中记录找到的值那样的副作用。同样,该函数现在可以按照名称中的说明进行操作,只是获得名称。

有关重新升级此方法的更多信息,请查看here

答案 3 :(得分:0)

您不需要“名称”数组。

getName = (id) => {
    for (var i = 0; i < countryList.length ; i++) {
        if (countryList[i].id === id) {
            console.log(name[i].name);
        } 
    }
}

答案 4 :(得分:0)

我认为这也可行

const countryList =  [
{ name: 'Afghanistan', id: 'AF' },
{ name: 'Åland Islands', id: 'AX' },
{ name: 'Albania', id: 'AL' },
{ name: 'Algeria', id: 'DZ' }];

getName=(id)=>{
    countryList.filter(item=>{item.id===id})
    console.log(countryList[0].name)
}

答案 5 :(得分:0)

如果国家/地区ID是唯一的,出于性能原因,您可以使用array.some

getCountryName = (countryList, id) => {
    name = null;
    countryList.some((x, idx) => {
        result = false;
        if(x.id === id) {
            name = x.name;
            result = true;
        }
        return result;
    });
    return name;
}

用法是

getCountryName(countryList, 'AF')

结果是

'Afghanistan'