Javascript 筛选对象数组返回空数组
我有以下对象数组:Javascript 筛选对象数组返回空数组,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,我有以下对象数组: arr = [ { name: "john", age: 24, gender: "male" }, { name: "jane", age: 27, gender: "female" }, { name: "joe", age: 29, gender: "male" } ] 我正在尝
arr = [
{
name: "john",
age: 24,
gender: "male"
},
{
name: "jane",
age: 27,
gender: "female"
},
{
name: "joe",
age: 29,
gender: "male"
}
]
我正在尝试将name
和age
属性过滤到一个新数组中。我试过这个:
const newFields = arr.filter((item) => {
return (
item.name && item.age
);
});
但是由于某种原因,
newFields
返回一个空数组。如果您正在使用原始数组的子集创建一个新数组,那么您可以迭代该数组并将所需的元素推送到它自己的数组中
也就是说,如果您想要得到的只是现有阵列的名称和年龄,那么为什么需要创建一个单独的阵列呢您只需迭代原始数组并仅引用每个项中所需的值
让arr=[
{
姓名:“约翰”,
年龄:24岁,
性别:“男性”
},
{
姓名:“简”,
年龄:27岁,
性别:“女性”
},
{
姓名:“乔”,
年龄:29,,
性别:“男性”
}
]
设newArr=[];
arr.forEach(功能(项目){
newArr.push({name:item.name,age:item.age})
});
console.log(newArr);//给出[{“name”:“john”,“age”:24},{“name”:“jane”,“age”:27},{“name”:“joe”,“age”:29}]
如果要使用原始数组的子集创建一个新数组,则可以迭代该数组并将所需的元素推送到它自己的数组中
也就是说,如果您想要得到的只是现有阵列的名称和年龄,那么为什么需要创建一个单独的阵列呢您只需迭代原始数组并仅引用每个项中所需的值
让arr=[
{
姓名:“约翰”,
年龄:24岁,
性别:“男性”
},
{
姓名:“简”,
年龄:27岁,
性别:“女性”
},
{
姓名:“乔”,
年龄:29,,
性别:“男性”
}
]
设newArr=[];
arr.forEach(功能(项目){
newArr.push({name:item.name,age:item.age})
});
console.log(newArr);//给出[{“name”:“john”,“age”:24},{“name”:“jane”,“age”:27},{“name”:“joe”,“age”:29}]
这也可以是带有箭头函数和
const newFields=arr.map({name,age})=>({name,age}))代码>
您的解决方案的结果不能为空,而是原始数组,因为在这种情况下,filter
函数的返回值将始终为真(每个项都有name和age属性),它不会过滤原始arr
变量中的任何内容。这也可以是带有箭头函数和
const newFields=arr.map({name,age})=>({name,age}))代码>
您的解决方案的结果不能为空,而是原始数组,因为在这种情况下,filter
函数的返回值将始终为真(每个项都有name和age属性),它不会过滤原始arr
变量中的任何内容。而不是使用
const arr=[
{
姓名:“约翰”,
年龄:24岁,
性别:“男性”
},
{
姓名:“简”,
年龄:27岁,
性别:“女性”
},
{
姓名:“乔”,
年龄:29,,
性别:“男性”
}
];
const newFields=arr.map(项=>{
返回{
名称:item.name,
年龄:item.age
}
});
console.log(newFields)
而不是使用
const arr=[
{
姓名:“约翰”,
年龄:24岁,
性别:“男性”
},
{
姓名:“简”,
年龄:27岁,
性别:“女性”
},
{
姓名:“乔”,
年龄:29,,
性别:“男性”
}
];
const newFields=arr.map(项=>{
返回{
名称:item.name,
年龄:item.age
}
});
console.log(newFields)
将filter
更改为map
并返回{name:item.name,age:item.age}
它工作得非常好。可能在数组筛选和数组定义之间,您对数组进行了变异,而数组已为空?filter
使用它从数组中删除条目<代码>映射
使用它转换数组中的条目。您需要后者。将过滤器
更改为映射
并返回{name:item.name,age:item.age}
它工作得非常好。可能在数组筛选和数组定义之间,您对数组进行了变异,而数组已为空?filter
使用它从数组中删除条目<代码>映射
使用它转换数组中的条目。你想要后者,谢谢。只是想知道性能方面forEach相比之下有多好,比如map?谢谢。只是想知道性能方面forEach与map相比有多好?