我试图根据它们的名称在不同的变量中找到每个链接值,例如如果名称,如果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"
});
谢谢
答案 0 :(得分:2)
有几种方法可以实现-最简单的方法是,如果您只是在1
上查找匹配的第一项,则使用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);
}
希望有帮助!
答案 1 :(得分:2)
您可以使用find
方法,如下所示:
requiredMediaByName = (name) => {
return state.socialMediaDetails.socialMediaDetail.find(data => data.name === name);
};
console.log(requiredMediaByName('facebook'));
请注意,find
返回数组中的第一个匹配元素,如果您在第一次匹配时得到它,则不会检查其他元素。如果要返回所有元素,则应使用for循环并获取所有元素。
答案 2 :(得分:0)
您可以使用:
如果你只想知道值是否存在
var doExist = arr.some(function(ele) { 返回 ele.id === '21'; });
如果您想获得您正在搜索的值:
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);