Javascript 从数组对象中获取唯一值(复杂)
所以这个脚本的输出应该是:Javascript 从数组对象中获取唯一值(复杂),javascript,arrays,object,Javascript,Arrays,Object,所以这个脚本的输出应该是: var myObject = { word1: { a: ['1.json', '2.json'] b: ['3.json', '4.json', '5.json'] }, word2: { x: ['1.json', '3.json'], y: ['2.json', '4.json'], z: ['5.json'] } } 这是逻辑,我希望能够得到使用min的文件。 以“1.json”为例,如下所示: myO
var myObject = {
word1: {
a: ['1.json', '2.json']
b: ['3.json', '4.json', '5.json']
},
word2: {
x: ['1.json', '3.json'],
y: ['2.json', '4.json'],
z: ['5.json']
}
}
这是逻辑,我希望能够得到使用min的文件。
以“1.json”为例,如下所示:
myObject.word1.a
而且
myObejct.word2.x
这意味着不再使用“1.json”。但将被添加到输出中
到目前为止的输出:[1.json]
棘手的部分来了
现在让我们转到“2.json”。
由于'1.json'已经在使用'myObject.word1.a',因此无法使用它,所以跳过它即可
到目前为止的输出:[1.json]
现在让我们转到'3.json',
它出现在myobject.word1.b上
它出现在myObject.word2.x//上,但是1.json已经填补了这个位置
所以它不能被使用
到目前为止的输出:[1.json]
让我们转到4.json
它出现在myobject.word1.b上
它出现在myobject.word2.y让我们把
单词和字母的组合命名为“dir”,数组元素命名为“files”
在迭代每个目录时,您可以将它们保存在(dirs)中。
在每个目录中,您可以循环其文件并更新(fileDirsMap)以保存此文件的目录
在此步骤之后,您将拥有可用的目录集,以及每个文件及其目录的映射:
['1.json', '4.json', '5.json']
现在,您可以迭代fileDirsMap
的条目
(适用于此处)。在每次迭代中,检查此文件是否有其所有的dir“not take”,如果有,则将文件添加到结果数组(acc
),并从集合中删除其所有dir(dirs
)(将其设置为take)
const myObject={
字1:{
答:['1.json','2.json'],
b:['3.json','4.json','5.json']
},
字2:{
x:['1.json','3.json'],
y:['2.json','4.json'],
z:['5.json']
}
};
const fileDirsMap=新映射();
const dirs=新集合();
Object.entries(myObject.forEach)([单词,字母])=>{
Object.entries(letters).forEach([letter,files])=>{
const dir=`${word}.${letter}`;
直接添加(直接);
files.forEach(文件=>
fileDirsMap.set(文件[…(fileDirsMap.get(文件)| |[]),dir])
);
});
});
const res=[…fileDirsMap.entries()].reduce((acc,[file,fileDirs])=>{
const allDirsNotTaken=fileDirs.every(fileDir=>dirs.has(fileDir));
如果(所有直接连接){
acc.push(文件);
forEach(fileDir=>dirs.delete(fileDir));
}
返回acc;
}, []);
控制台日志(res)代码>和您的代码?你试过了?你能分享你到目前为止试过的吗?StackOverflow不是一个免费的代码编写服务,它希望您首先尝试解决自己的问题。请更新您的问题,以显示您已经尝试过的内容,并显示您在某个问题中面临的具体问题。有关更多信息,请参阅。作为开始的提示,听起来您需要两个变量(映射或设置)来跟踪哪些键和值已被查看/分配,以及一个用于输出。在遍历可能性时检查这些选项,并将插槽标记为已使用。我不理解为什么5。鉴于word1.b
由4使用word1.b
可以使用json。json
是的,这些约束令人困惑,因为您从单步执行单词中的键变为单步执行单词之间的json这使得我们很难说出这个练习的实际规则是什么。
dirs: [ "word1.a", "word1.b", "word2.x", "word2.y", "word2.z" ]
fileDirsMap: [
[ "1.json", [ "word1.a", "word2.x" ] ],
[ "2.json", [ "word1.a", "word2.y" ] ],
[ "3.json", [ "word1.b", "word2.x" ] ],
[ "4.json", [ "word1.b", "word2.y" ] ],
[ "5.json", [ "word1.b", "word2.z" ] ]
]