我如何在React Native中从数组中找到特定的值

时间:2019-08-02 04:28:46

标签: javascript reactjs react-native ecmascript-6

我试图根据它们的名称在不同的变量中找到每个链接值,例如如果名称,如果facebook,那么facebooklink应该过滤,相同的lite twitter和all。但是不想给出索引号。有时fabook应该是索引,有时twitter会是0索引。请帮助

socialMediaDetails:
            socialMediaDetail: Array(2)
            0:
            link: "HARIRAM@twitter.com"
            name: "twitter"
            __typename: "SocialMediaDetail"
            __proto__: Object
            1:
            link: "VarnaHERO@facebook.com"
            name: "facebook"
            __typename: "SocialMediaDetail"
            __proto__: Object
            2:
            link: "linkedIn@linkedin.com"
            name: "linkedIn"
            __typename: "SocialMediaDetail"

        const socialMediaData=socialMediaDetails.socialMediaDetail;

            const Steplabels = socialMediaData.filter((item) => {
              return item.name === "twitter"
            });

谢谢

3 个答案:

答案 0 :(得分:2)

有几种方法可以实现-最简单的方法是,如果您只是在1上查找匹配的第一项,则使用for .. of循环:

name

对于其他情况,例如返回存在function findLinkByName(name) { for (const item of state.socialMediaDetails.socialMediaDetail) { if (item.name === name) { return item.link; } } } 上有多个匹配项的项目子集,则可以像这样实现基于namefilter()的简单解决方案:

map()

以下是同时显示两者的摘要:

function findLinksByName(name) {
  return state.socialMediaDetails.socialMediaDetail
    .filter(item => item.name === name)
    .map(item => item.link);
}

希望有帮助!

答案 1 :(得分:2)

您可以使用find方法,如下所示:

requiredMediaByName = (name) => {
 return state.socialMediaDetails.socialMediaDetail.find(data => data.name === name);
}; 
console.log(requiredMediaByName('facebook'));

请注意,find返回数组中的第一个匹配元素,如果您在第一次匹配时得到它,则不会检查其他元素。如果要返回所有元素,则应使用for循环并获取所有元素。

答案 2 :(得分:0)

您可以使用:

  1. 如果你只想知道值是否存在

    var doExist = arr.some(function(ele) { 返回 ele.id === '21'; });

  2. 如果您想获得您正在搜索的值:

    var 数据 = arr.find(function(ele) { 返回 ele.id === '21'; });

    如果(数据){ console.log('找到'); 控制台日志(数据); // 这是整个对象,即 item 不是布尔值 }

我在这个例子中使用了以下数组:

var arr = [];
var item1 = {
    id: 21,
    label: 'Banana',
};
var item2 = {
    id: 22,
    label: 'Apple',
};
arr.push(item1, item2);