Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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_Properties - Fatal编程技术网

Javascript合并/筛选数组

Javascript合并/筛选数组,javascript,arrays,properties,Javascript,Arrays,Properties,给定以下json对象: var posts = { [0] : { "name": "X", "categories" : [1, 5, 6] }, [1] : { "name": "Y", "categories" : [1, 5, 7] } } 如何在不重复的情况下获得包含每个“类别”属性值的单个数组 在本例中,我想检索如下内容 var对象分类=[1,5,6,7] 类似于 var objCate

给定以下json对象:

var posts = {
    [0] : {
        "name": "X",
        "categories" : [1, 5, 6]
    },
    [1] : {
        "name": "Y",
        "categories" : [1, 5, 7]
    }
}
如何在不重复的情况下获得包含每个“类别”属性值的单个数组

在本例中,我想检索如下内容

var对象分类=[1,5,6,7]

类似于

var objCategories = {}; //create a map for all unique keys
Object.keys(posts).forEach( function(index){
  var post = posts[ index ]; //get access to the object
  post.categories.forEach( function(cat){
    objCategories[ cat ] = cat;  
  });
});
objCategories = Object.keys( objCategories ); //get only the arrays of categories and assign them back to objCategories for desired result

var posts={
[0] : {
“名称”:“X”,
“类别”:[1,5,6]
},
[1] : {
“名称”:“Y”,
“类别”:[1,5,7]
}
}
//逻辑
var merged=[];//获取所有类别
for(让name在posts中){//loop-through-name
var post=posts[name];//获取post
merged=merged.concat(post.categories);//添加类别
}
var unique=merged.filter(函数(项、位置、自身){//筛选重复项
返回自身索引(项目)=位置;
});

console.log(唯一)您必须在对象中循环:

var posts={
[0] : {
“名称”:“X”,
“类别”:[1,5,6]
},
[1] : {
“名称”:“Y”,
“类别”:[1,5,7]
}
}
var objCategories=[];
Object.values(posts).forEach(post=>{
post.categories.forEach(c=>{
if(对象分类索引of(c)=-1){
对象分类推送(c);
}
})
});

console.log(对象分类)在支持ES6的环境中,可以使用Set和reduce

let objCategories = [...new Set(Object.values(posts).reduce((a,b) => a.concat(b.categories), []))];
let posts={
[0]: {
“名称”:“X”,
“类别”:[1,5,6]
},
[1]: {
“名称”:“Y”,
“类别”:[1,5,7]
}
};
让cats=[…新集合(Object.values(posts.reduce)((a,b)=>a.concat(b.categories),[]);

控制台日志(CAT)使用reduce和forEach:

var posts={
[0] : {
“名称”:“X”,
“类别”:[1,5,6]
},
[1] : {
“名称”:“Y”,
“类别”:[1,5,7]
}
};
var result=Object.keys(posts).reduce(函数(类别,键){
posts[key].categories.forEach(函数(类别)){
if(categories.indexOf(category)=-1){
类别。推送(类别);
}
});
退货类别;
}, []);

控制台日志(结果)请了解和之间的区别。你对
帖子的定义很奇怪。我投票将这个问题作为离题来结束,因为这个问题显示了输入和输出格式,但没有任何努力的迹象。这使问题成为一个要求,而不是一个问题陈述。您可以参考以下链接:and和play-around(merge)以获得最终解决方案。这将导致
TypeError:posts.forEach不是函数,因为它不是数组,而是对象。@Svenskunganka重试now@Rayon是的,我的朋友,请加上解释。像这样的事情对任何人都没有帮助什么?这就解决了问题——他要求找到所有独特的分类。我的观点是关于你的解释。不要解释你在做什么以及为什么要做你正在做的事情。你回答的是读者,而不仅仅是OP。