通过javascript迭代对象数组的不同方法?

通过javascript迭代对象数组的不同方法?,javascript,Javascript,如果这对你来说是个愚蠢的问题,请忽略。我刚刚提出了我自己的问题解决方案,但我知道这不是一个好的解决方案,还有更好更聪明的方法来解决这个问题,如果您有其他仅使用javascript的解决方案,请回答 它要求生成一个函数来循环遍历对象数组,如果firstName与概要文件匹配,则返回对象的prop。如果未找到提供给函数的firstName或prop,则返回一些语句 var联系人=[ { “名字”:“夏洛克”, “姓氏”:“福尔摩斯”, “编号”:“0487345643”, “喜欢”:[“插曲盒”、

如果这对你来说是个愚蠢的问题,请忽略。我刚刚提出了我自己的问题解决方案,但我知道这不是一个好的解决方案,还有更好更聪明的方法来解决这个问题,如果您有其他仅使用javascript的解决方案,请回答

它要求生成一个函数来循环遍历对象数组,如果firstName与概要文件匹配,则返回对象的prop。如果未找到提供给函数的firstName或prop,则返回一些语句

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