Javascript 如何使用.forEach()方法遍历对象并将结果存储在新数组中

Javascript 如何使用.forEach()方法遍历对象并将结果存储在新数组中,javascript,arrays,object,foreach,Javascript,Arrays,Object,Foreach,我想循环遍历对象dogNames,只将我拥有的狗的名字返回到数组myDogs中。我希望我的狗在登录时显示为: ['Remington'、'Ruby'、'Chief'、'Link'] 很可能,我不了解.forEach()方法如何工作和/或如何操作对象。这是一些家庭作业帮助,我只是不理解.forEach()方法。谢谢你的帮助。请给我指出正确的方向,我不想让其他人来解决这个问题 首先,这里是我编写的数组 var dogNames = [ {name: Kevin, mine: false}

我想循环遍历对象dogNames,只将我拥有的狗的名字返回到数组myDogs中。我希望我的狗在登录时显示为:

['Remington'、'Ruby'、'Chief'、'Link']

很可能,我不了解.forEach()方法如何工作和/或如何操作对象。这是一些家庭作业帮助,我只是不理解.forEach()方法。谢谢你的帮助。请给我指出正确的方向,我不想让其他人来解决这个问题

首先,这里是我编写的数组

var dogNames = [
  {name: Kevin,     mine: false},
  {name: Remington, mine: true},
  {name: Bingo,     mine: false},
  {name: Ruger,     mine: false},
  {name: Ruby,      mine: true},
  {name: Gino,      mine: false},
  {name: Chief,     mine: true},
  {name: Watson,    mine: false},
  {name: Link,      mine: true}
];
这是我要将结果存储到的数组

var myDogs = [];
这就是我在谷歌搜索后试图做的事情

dogNames.forEach(function(mine){
    if(mine === true){
        myDogs.push(dogNames.name);
    }
});
在你的方法中:

dogNames.forEach(function(mine){
    if(mine === true){
        myDogs.push(dogNames.name);
    }
});
我的基本上是数组中的一个元素,因此要访问该元素的属性,需要使用点表示法。您可以使用
mine.mine
访问mine属性,使用
mine.name
访问名称。现在只需进行正确的比较并在数组中推送正确的值

虽然您不需要使用.forEach(),但更简单的方法是使用
.filter()
.map()
从数组中返回
name
键的值,以获得My true

dogNames.filter(el => el.mine).map( el => el.name); 
请参阅下面的完整代码

var dogNames=[
{名字:“凯文”,我的名字:假},
{名字:“雷明顿”,我的:真的},
{name:“宾果”,我的:false},
{name:“Ruger”,我的:false},
{name:“Ruby”,我的:true},
{名字:“吉诺”,我的名字:假},
{姓名:“酋长”,我的:真的},
{名字:“沃森”,我的名字:假},
{name:“Link”,我的:true}
];
var myDogs=dogNames.filter(el=>el.mine.map)(el=>el.name);

log(myDogs)
您可以筛选和映射已筛选数组的名称

var dogNames=[{name:'Kevin',mine:false},{name:'Remington',mine:true},{name:'Bingo',mine:false},{name:'Ruger',mine:false},{name:'Ruby',mine:true},{name:'Gino',mine:false},{name:'Chief Chief mine:true},{name:'Watson',mine:false},{name:'Link mine:'true},{,
我的狗=狗名
.filter(({mine})=>mine)
.map(({name})=>name)

控制台日志(myDogs)当您遍历
狗名
时,
函数
中的参数是每个对象。所以你认为是我的,实际上是整个物体

相反:

dogNames.forEach(dogName => {
    if(dogName.mine === true){
        myDogs.push(dogName.name);
    }
});
var dogNames=[
{名字:'Kevin',我的名字:false},
{名字:'Remington',我的名字:true},
{name:'Bingo',我的:false},
{名字:'Ruger',我的名字:false},
{name:'Ruby',我的:true},
{名字:'Gino',我的名字:false},
{姓名:'Chief',我的:true},
{名字:'Watson',我的名字:false},
{name:'Link',我的:true}
];
var myDogs=[];
dogNames.forEach(函数(dog){
如果(dog.mine==真){
myDogs.push(dog.name);
}
});

控制台日志(myDogs)在您的逻辑中,当您执行
推送时,您需要将
mine.name
作为参数传递,而不是
dogNames.name

在您的
forEach
中,当您放置
我的
时,您将收到类似
{name:'Kevin',mine:false}
的对象,因此,您需要指定要检查的属性,就像在
if
语句中一样

var dogNames = [
  {name: 'Kevin',     mine: false},
  {name: 'Remington', mine: true},
  {name: 'Bingo',     mine: false},
  {name: 'Ruger',     mine: false},
  {name: 'Ruby',      mine: true},
  {name: 'Gino',      mine: false},
  {name: 'Chief',     mine: true},
  {name: 'Watson',    mine: false},
  {name: 'Link',      mine: true}
];

var myDogs = [];

dogNames.forEach(mine => (mine.mine && myDogs.push(mine.name)));

与其解决问题,不如讨论“forEach”

Array.prototype.forEach的参数是一个函数。为数组中的每个项调用此函数

该函数接受一个表示数组中单个项的参数。 因此,如果我有:

var results = [];
var myArray = [1, 2, 3, 4, 5];
我有一个函数

function addOne(n) {
    results.push(n + 1)
}
我可以这样在我的数组中调用forEach

myArray.forEach(addOne)
这将使我的结果数组看起来像

>>> [2, 3, 4, 5, 6]
>>> [{a: 2}, {a: 3}, {a: 4}]
我认为您的困惑是因为您正在处理一个对象数组,并且您试图迭代对象的属性(
mine:boolean
),而不是对象本身(
{name:string,mine:boolean}

在您的情况下,可以使用如下数组:

var secondResults = []
var myObjArray = [{a: 1}, {a: 2}, {a:3}]
还有一个功能

function addOneToObj(obj) {
   obj.a = obj.a + 1;
   secondResults.push(obj)
}
你可以打电话给forEach

 myObjArray.forEach(addOneToObj)
第二个结果将是

>>> [2, 3, 4, 5, 6]
>>> [{a: 2}, {a: 3}, {a: 4}]
var结果=[];
var myArray=[1,2,3,4,5];
函数addOne(n){
结果:推送(n+1)
}
myArray.forEach(addOne)
控制台日志(结果)//[2, 3, 4, 5, 6]
var secondResults=[]
var myObjArray=[{a:1},{a:2},{a:3}]
功能addOneToObj(obj){
对象a=对象a+1;
第二个结果。推送(obj)
}
myObjArray.forEach(addOneToObj)
console.log(secondResults)//[{a:2},{a:3},{a:4}

具有功能
减少

var dogNames=[{name:'Kevin',mine:false},{name:'Remington',mine:true},{name:'Bingo',mine:false},{name:'Ruger',mine:false},{name:'Ruby',mine:true},{name:'Gino',mine:false},{name:'Chief Chief mine:true},{name:'Watson',mine:false},{name:'Link mine:'true};
var myDogs=dogNames.reduce((a,d)=>{
如果(d.mine)a.push(d.name);
返回a;
}, []);
console.log(myDogs);

.as控制台包装{max height:100%!important;top:0;}
您正在查找的
.filter()
&
.map()
我希望是。我需要使用.forEach()
dogName.my
是一个布尔值,您不需要与
true
进行比较,这正是我不理解的,谢谢。没问题,Ele是正确的,您可以使用
if(dogName.my)
过几天我就要去一个代码训练营了,我不太明白事情是如何运作的。你能解释一下,或者只是给出一个关于如何使用布尔值的链接吗?至少在你当前问题的上下文中是这样的:对于
if
语句,如果括号之间的代码计算结果为
true
它将执行t括号中的代码。
mine
的值都是
true
false
,不需要进一步计算。y是什么