如何通过特定属性在数组中查找特定值元素?

时间:2019-02-12 11:15:47

标签: javascript arrays filter find

var attributeList = [];

var attributeEmail = {
    Name : 'email',
    Value : 'email@mydomain.com'
};
var attributePhoneNumber = {
    Name : 'phone_number',
    Value : '+15555555555'
};
attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

结果是:

Attributes: Array(2)
1: {Name: "phone_number", Value: "+15555555555"}
2: {Name: "email", Value: "email@mydomain.com"}

我需要在attributeList中找到电子邮件

var email = getEmail(attributeList);
console.log(email); // email@mydomain.com

private getEmailAttribute(attributeList) {
    // Name: "email"...
    return ????;
}

3 个答案:

答案 0 :(得分:3)

您可以使用filter()map()shift()来获取电子邮件。此方法是安全的,它不会抛出,如果找不到电子邮件对象,则会返回undefined

const attributeList = [];

const attributeEmail = {
  Name : 'email',
  Value : 'email@mydomain.com'
};
const attributePhoneNumber = {
  Name : 'phone_number',
  Value : '+15555555555'
};
attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

function getEmailAttribute(attributes) {
    return attributes
      .filter(attr => attr.Name === 'email')
      .map(attr => attr.Value)
      .shift();
}

const email = getEmailAttribute(attributeList);
console.log(email);

答案 1 :(得分:1)

使用Array.prototype.find()获取其object的{​​{1}},然后Name = "email"return

Value

答案 2 :(得分:1)

您可以将.finddestructuring assignment一起使用,以获取具有Name电子邮件的对象。然后,一旦检索到对象,就可以使用.Value属性获取电子邮件。

请参见以下示例:

function getEmailAttribute(attributeList) {
  return attributeList.find(({Name}) => Name === "email").Value;
}

var attributeList = [{Name: 'email', Value: 'email@mydomain.com'},{Name: 'phone_number', Value: '+15555555555'}];
console.log(getEmailAttribute(attributeList));

作为旁注。要使用javascript声明函数,请不要使用private关键字。相反,您可以像上面一样使用function关键字。