Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 过滤对象数组,但只返回特定属性-JS_Javascript_Arrays_Ecmascript 6_Filter - Fatal编程技术网

Javascript 过滤对象数组,但只返回特定属性-JS

Javascript 过滤对象数组,但只返回特定属性-JS,javascript,arrays,ecmascript-6,filter,Javascript,Arrays,Ecmascript 6,Filter,如何过滤具有条件的对象数组,并仅返回过滤对象的特定属性 我知道我们可以使用过滤器和映射来实现这一点。但我正在寻找更简单的解决方案 例如: 让arr=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}] 假设我只需要名为“拉拉”的ID 产出应该是, [{id:1},{id:3}]filter后跟map可能是最具可读性的解决方案,但如果您希望在一个步骤中完成这一切,那么您可以使用经典的for循环或使用reduce 过滤器后接映射可能是最具可读性

如何过滤具有条件的对象数组,并仅返回过滤对象的特定属性

我知道我们可以使用过滤器和映射来实现这一点。但我正在寻找更简单的解决方案

例如:
让arr=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}]

假设我只需要名为“拉拉”的ID

产出应该是,


[{id:1},{id:3}]
filter
后跟
map
可能是最具可读性的解决方案,但如果您希望在一个步骤中完成这一切,那么您可以使用经典的
for
循环或使用
reduce


过滤器
后接
映射
可能是最具可读性的解决方案,但如果您希望在一个步骤中完成这一切,您可以使用经典的
for
循环或使用
reduce

您可以简单地使用在同一操作中组合映射和筛选。如果要使其超级简洁,可以在reduce回调的第二个参数中使用对象分解:

让arr=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}];
让filteredMappedArr=arr.reduce((acc,{name,id})=>{
如果(名称=='lala')
acc.push({id});
返回acc;
}, []);
console.log(filteredmappedar)您可以简单地使用在同一操作中组合映射和筛选。如果要使其超级简洁,可以在reduce回调的第二个参数中使用对象分解:

让arr=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}];
让filteredMappedArr=arr.reduce((acc,{name,id})=>{
如果(名称=='lala')
acc.push({id});
返回acc;
}, []);

console.log(filteredmappedar)
您可以通过使用
过滤器
映射
来实现这一点

let arr=[{name:“拉拉”,id:1},{name:“可可”,id:2},{name:“拉拉”,id:3}]
让res=arr.filter(item=>item.id%2==1).map(item=>({id:item.id}))

控制台日志(res)
您可以通过使用
过滤器
映射
来实现这一点

let arr=[{name:“拉拉”,id:1},{name:“可可”,id:2},{name:“拉拉”,id:3}]
让res=arr.filter(item=>item.id%2==1).map(item=>({id:item.id}))

控制台日志(res)下一个最简单的方法是reduce

让arr=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}];
console.log(
arr.reduce((值,值)=>
{
if(value.name==='lala')values.push({id:value.id});
返回值;
}, [])

);下一个最简单的方法是reduce

让arr=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}];
console.log(
arr.reduce((值,值)=>
{
if(value.name==='lala')values.push({id:value.id});
返回值;
}, [])
);您可以获取并返回一个新的obejct或一个空数组,该数组没有展平值

let数组=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}],
结果=数组.flatMap(({id,name})=>name=='lala'?[{id}]:[]);
控制台日志(结果)您可以获取并返回一个新的obejct或一个空数组,该数组没有展平值

let数组=[{name:“拉拉”,id:1},{name:“coco”,id:2},{name:“拉拉”,id:3}],
结果=数组.flatMap(({id,name})=>name=='lala'?[{id}]:[]);
控制台日志(结果)使用和功能:

let arr=[{name:“拉拉”,id:1},{name:“可可”,id:2},{name:“拉拉”,id:3}]
让newArr=arr.filter((elm)=>(elm.name=='lala')).map((elm)=>{return{id:elm.id});
控制台日志(newArr)使用和功能:

let arr=[{name:“拉拉”,id:1},{name:“可可”,id:2},{name:“拉拉”,id:3}]
让newArr=arr.filter((elm)=>(elm.name=='lala')).map((elm)=>{return{id:elm.id});
控制台日志(newArr)
使用过滤器,我们检查名称与“lala”匹配的条件,如果是,则将id推送到新数组中……这很简单


使用filter,我们检查名称与'lala'匹配的条件,如果是,则将id推送到新数组……这很简单,

filter和map是正确的方法。如果你想避免多次迭代,你必须使用像foreach这样的一个循环。Filter和map正是正确的方法。如果你想避免多次迭代,你必须使用一个循环,比如foreach。优雅的解决方案,但也比这里给出的其他方法慢得多-如果速度和可伸缩性重要(请参阅)优雅的解决方案,但也比这里给出的其他方法慢得多-如果速度和可伸缩性重要(请参阅),请不要只发布代码作为答案,但也要解释一下你的代码是做什么的,以及它是如何解决问题的。带有解释的答案通常质量更高,并且更有可能吸引更多的选票。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常质量更高,更容易吸引选票。

let arr = [
  { name: "lala", id: 1 },
  { name: "coco", id: 2 },
  { name: "lala", id: 3 },
];
let a = [];
arr.filter(({ name, id }) => {
  if (name === "lala") {
    a.push({ id });
  }
});
console.log(a);