[英]From an array of objects, return key in new array
我有一个对象数组,并且必须以新数组返回关键的puppies
:此函数采用以下格式的狗数组:
[
{breed: 'Labrador', puppies: ['Fluffy', 'Doggo', 'Floof'] },
{breed: 'Rottweiler', puppies: ['Biscuits', 'Mary'] }
]
它应该返回所有狗的所有幼犬的数组:
['Fluffy', 'Doggo', 'Floof', 'Biscuits', 'Mary']
到目前为止,这是我的代码:
function collectPuppies (dogs) {
let solution=[];
for(let i=0; i<dogs.length; i++){
solution.push(dogs[i].puppies);
}
return solution;
}
它将名称添加到解决方案,但在[[ ]]
之间返回它们:
Expected [ [ 'Spot', 'Spotless' ] ] to deeply equal [ 'Spot', 'Spotless' ]
我已经在该线程中看到了我的解决方案,所以我相信我还不算太远,但无法弄清楚我在做什么错。 谁能帮我吗? 提前致谢。
使用传播语法将项目推入数组:
const dogs = [{"breed":"Labrador","puppies":["Fluffy","Doggo","Floof"]},{"breed":"Rottweiler","puppies":["Biscuits","Mary"]}]; function collectPuppies(dogs) { const solution = []; for (let i = 0; i < dogs.length; i++) { solution.push(...dogs[i].puppies); } return solution; } console.log(collectPuppies(dogs));
另一个选择是使用Array.map()
获得幼犬,并通过扩展到Array.concat()
使结果变平:
const dogs = [{"breed":"Labrador","puppies":["Fluffy","Doggo","Floof"]},{"breed":"Rottweiler","puppies":["Biscuits","Mary"]}]; const collectPuppies = (dogs) => [].concat(...dogs.map(({ puppies }) => puppies)); console.log(collectPuppies(dogs));
你可以抗拒。
const dogs = [ {breed: 'Labrador', puppies: ['Fluffy', 'Doggo', 'Floof'] }, {breed: 'Rottweiler', puppies: ['Biscuits', 'Mary'] } ] const collectPuppies = dogs => dogs.map(d => d.puppies).reduce((a,b) => a.concat(b), []); console.log(collectPuppies(dogs));
您只需要reduce
Array.prototype。
x=[ {breed: 'Labrador', puppies: ['Fluffy', 'Doggo', 'Floof'] }, {breed: 'Rottweiler', puppies: ['Biscuits', 'Mary'] } ] ; var result=x.reduce((y,e)=>y.concat(e.puppies),[]); console.log(result);
Array.prototype.push
会将每个参数推入数组,但不会推入每个参数的单个数组元素。
更正代码的最简单方法是用concat
替换push
:
concat()方法用于合并两个或多个数组。
function collectPuppies(dogs) {
let solution = [];
for (let i=0; i < dogs.length; i++){
solution = solution.concat(dogs[i].puppies);
}
return solution;
}
在对象数组中,小狗也是数组。 因此,您要将数组添加到数组中。 代替:
solution.push(dogs[i].puppies);
您需要遍历puppies数组,并将每个pupple分别添加到解决方案数组。 第二个内部循环没有将'puppies'字段添加到解决方案数组,而是循环遍历每个对象的puppies数组并将其添加到solution数组。 通过在puppies数组上调用forEach()可以轻松完成第二个内部循环。 例如:
dogs[i].puppies.forEach((puppy) => {solution.push(puppy)});
那么最后一个函数是:
function collectPuppies (dogs) {
let solution=[];
for(let i=0; i<dogs.length; i++){
dogs[i].puppies.forEach((puppy) => {solution.push(puppy)});
}
return solution;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.