簡體   English   中英

如何在反應原生中從數組中找到特定值

[英]How can I find particular value from array in react native

我試圖根據他們的名字在不同的變量中找到每個鏈接值,比如如果名字如果 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"
            });

謝謝

有幾種方法可以實現 - 最簡單的方法是使用for .. of循環,如果你只是尋找匹配name的第一個項目:

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

這是一個顯示兩者的動作片段:

 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')); 

希望有所幫助!

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

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

請注意, find返回數組中的第一個匹配元素,如果您在第一次匹配時獲取它,則不會檢查其他元素。 如果你想要返回所有元素,那么你應該使用for循環並獲取所有元素。

你可以使用:

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

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

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

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

    if (data) { console.log('found'); 控制台日志(數據); // 這是整個對象,即item不是布爾值 }

我在這個例子中使用了以下數組:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM