【问题标题】:How can I find particular value from array in react native如何在本机反应中从数组中找到特定值
【发布时间】:2019-12-10 16:43:44
【问题描述】:

我试图根据他们的名字在不同的变量中找到每个链接值,比如如果 name 如果 facebook 那么 facebooklink 应该过滤,同样的 lite twitter 等等。但不想给出索引号。有时 fabook 应该是 o 索引,有时 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"
            });

谢谢

【问题讨论】:

  • 那么,您发布的代码有什么问题?请创建一个minimal reproducible example
  • 通过上面的代码,这段代码即将到来,而我只想要名称链接:“HARIRAM@twitter.com”名称:“twitter”__typename:“SocialMediaDetail

标签: javascript reactjs react-native ecmascript-6


【解决方案1】:

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

function findLinkByName(name) {
  for (const item of state.socialMediaDetails.socialMediaDetail) {
    if (item.name === name) {
      return item.link;
    }
  }
}

对于其他情况,例如返回在name 上存在多个匹配项的项目子集,则可以像这样实现基于filter()map() 的简单解决方案:

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

这是一个显示两者的 sn-p:

var state = {
  socialMediaDetails: {
    socialMediaDetail: [{
        link: "HARIRAM@twitter.com",
        name: "twitter"
      }, {
        link: "VarnaHERO@facebook.com",
        name: "facebook"
      }, {
        link: "linkedIn@linkedin.com",
        name: "linkedIn"
      }, {
        link: "another twitter link",
        name: "twitter"
      }
    ]
  }
}

/* 
Find link of first item matching by name (or undefined if no match found) 
*/
function findLinkByName(name) {
  for (const item of state.socialMediaDetails.socialMediaDetail) {
    if (item.name === name) {
      return item.link;
    }
  }
}

/* 
Find links for all items with matching name (or empty array if no
matches found) 
*/
function findLinksByName(name) {
  return state.socialMediaDetails.socialMediaDetail
    .filter(item => item.name === name)
    .map(item => item.link);
}

console.log(findLinkByName('twitter'));
console.log(findLinkByName('facebook'));
console.log(findLinksByName('twitter'));
console.log(findLinksByName('facebook'));

希望有帮助!

【讨论】:

  • 谢谢我试过这个..这是正确的 const twitterDatavalue = socialMediaData.filter((item) => { return item.name === "twitter" }); console.log("链接数据",twitterDatavalue[0].link);
  • 不客气 - 不太看到 filter() 将返回一个数组。你可以这样做:const twitterDatavalue = socialMediaData.filter((item) => item.name === "twitter")[0];
  • @AbhigyanGaurav 请考虑将此答案标记为已接受,如果有帮助,请单击答案旁边的“灰色勾号”!
【解决方案2】:

你可以使用find方法,像这样:

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

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

【讨论】:

  • @Abhigyan Gaurav find 如果您想获得第一个匹配值而不是使用 for 循环和过滤器,则最好
【解决方案3】:

你可以使用:

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

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

  2. 如果你想得到你正在搜索的值:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多