通过javascript迭代对象数组的不同方法?
如果这对你来说是个愚蠢的问题,请忽略。我刚刚提出了我自己的问题解决方案,但我知道这不是一个好的解决方案,还有更好更聪明的方法来解决这个问题,如果您有其他仅使用javascript的解决方案,请回答 它要求生成一个函数来循环遍历对象数组,如果firstName与概要文件匹配,则返回对象的prop。如果未找到提供给函数的firstName或prop,则返回一些语句通过javascript迭代对象数组的不同方法?,javascript,Javascript,如果这对你来说是个愚蠢的问题,请忽略。我刚刚提出了我自己的问题解决方案,但我知道这不是一个好的解决方案,还有更好更聪明的方法来解决这个问题,如果您有其他仅使用javascript的解决方案,请回答 它要求生成一个函数来循环遍历对象数组,如果firstName与概要文件匹配,则返回对象的prop。如果未找到提供给函数的firstName或prop,则返回一些语句 var联系人=[ { “名字”:“夏洛克”, “姓氏”:“福尔摩斯”, “编号”:“0487345643”, “喜欢”:[“插曲盒”、
var联系人=[
{
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“插曲盒”、“小提琴”]
},
{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
},
{
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
},
{
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
},
];
函数查找(名字,道具){
对于(var i=0;i
contacts.length
是一个整数,而不是字符串,因此不需要parseInt
- 如果
,您实际上不需要:您可以将其置于循环之外,因为如果联系人存在,您将已经退出该函数。这也使得n
没有必要,并且第一点没有意义
一般来说,返回错误消息是个坏主意,除非它们可以清楚地区分为错误消息(请参阅);这些应该作为异常抛出,或者至少作为非值返回null
/未定义;或者,当你要求查找('Adolf','FavoriteSoup')
时,你可能会认为汤名为“无此类联系”
。然而,如果给你的任务是返回错误消息,我想你对此无能为力
您可以使用
另外,正如@Amadan所提到的,不要返回错误消息,而是抛出一个back,您需要在调用方法中捕获它
try
{
lookUp();//making call here
}
catch(e)
{
console.error( e );
}
我建议将两个想要的函数拆分为两个函数
获取具有给定键/值对的所有对象查找(a、k、v)
仅从对象数组中获取一个键getKey(a,k)
函数查找(a、k、v){
返回a.filter(函数(b){
返回b[k]==v;
});
}
函数getKey(a,k){
返回a.map(函数(b){
在b?b[k]中返回k:“无属性”+k;
});
}
功能打印(o){
document.write(''+JSON.stringify(o,0,4)+'');
}
var contacts=[{“firstName”:“Sherlock”,“lastName”:“Holmes”,“number”:“0487345643”,“likes”:“Intruiging Cases”,“小提琴”],{“firstName”:“Akira”,“lastName”:“Laine”,“number”:“0543236543”,“likes”:[“Pizza”,“Coding”,“Brownie Points”],{“firstName”:“Harry”,“lastName”:“Potter”,“number”:“0994372684”,“likes”:“霍格沃茨”,“Magic”,“海格”]},{“名字”:“克里斯蒂安”,“姓氏”:“Vos”,“数字”:“未知”,“喜欢”:[“Javascript”,“游戏”,“狐狸”]}];
打印(查找(联系人、“名字”、“夏洛克”);
打印(getKey(查找(联系人、'firstName'、'Sherlock')、'likes'))代码>你可以使用库吗?看看Array.filter没有库,只有纯Javascript我同意。提出例外是更好的做法。如果属性值是没有这样的联系人
,那么将非常荒谬,无法区分有效输出和无效输出。
try
{
lookUp();//making call here
}
catch(e)
{
console.error( e );
}