Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 筛选对象数组返回空数组_Javascript_Arrays_Object_Filter - Fatal编程技术网

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相比有多好?