首页 > 解决方案 > 为什么我的代码返回数组的最后一个值,而不是返回每个项目的结果?

问题描述

您将获得一组对象(PHP 中的关联数组),这些对象表示已注册参加您正在组织的下一次编码聚会的开发人员的数据。

您的任务是返回一个数组,其中每个对象都有一个新属性“greeting”,其字符串值如下:

嗨<这里的名字>,你最喜欢<这里的语言>的什么?

例如,给定以下输入数组:

var list1 = [

{ firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 'Americas', age: 35, language: 'Java' },

  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 'Europe', age: 35, language: 'Python' }
]

您的函数应返回以下数组:

[
  { firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 'Americas', age: 35, language: 'Java',
    greeting: 'Hi Sofia, what do you like the most about Java?'
  },

  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 'Europe', age: 35, language: 'Python',
    greeting: 'Hi Lukas, what do you like the most about Python?'
  }];

到目前为止,我有这个:


var count = 0;

  for (var i = 0; i < list.length; i++){

  count +=1;

    list.forEach (function greet(string){

    string.Greeting = "Hi " + list[i].firstName + ",what do you like most about " + list[i].language + "?";

    });  // For each object in array, add string "greeting:" using function

  }

console.log(list);

}

这将返回问候语,但返回数组名称和语言中的最后一个人,而不是单独返回每个人。

标签: javascriptarrays

解决方案


正如@TKoL 所说,您错误地将 for 和 forEach 混合在一起。你只需要:

for (var i = 0; i < list.length; i++){
  list[i].greeting = `Hi ${list[i].firstName}, what do you like most about ${list[i].language}?`;
}

或者

list.forEach(l => l.greeting = `Hi ${l.firstName}, what do you like most about ${l.language}?`);

推荐阅读