Example
var wishlist = [
{name: "Mini Puzzle", size: "small", clatters: "yes", weight: "light"},
{name: "Toy Car", size: "medium", clatters: "a bit", weight: "medium"},
{name: "Card Game", size: "small", clatters: "no", weight: "light"}
];
var presents = [
{size: "medium", clatters: "a bit", weight: "medium"},
{size: "small", clatters: "yes", weight: "light"}
];
guessGifts(wishlist, presents); // must return ["Toy Car", "Mini Puzzle"]
怎么实现guessGifts这个功能,codewars遇到的题目,自己写了一半天没写出来。
我想说明一下,wishlist.length和presents.length的个数未知,并且里面的键值对也是未知的,循环遍历的话要嵌套好几层,有没有其他更简单的办法?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
如果是要大量处理的话,把size, clatters, weight拼成一个属性value,再做一点映射。譬如:
size: 'small' -> 0 'medium' -> 1 'large' -> 2 //and so on ...
clatters: 'no' -> 0 'a bit' -> 1 'yes' -> 2
weight: 'light' -> 0 'medium' -> 1 'heavy' -> 2 ...
那么'Card Game'对应的value就是 000 .
这样wishlist就像一个map,每一个name(key)对应一个value,然后presents里面全存的都是value,然后你就
根据这个value去找对应的key就行了,只不过这个key不一定是唯一的。
至于是要先把wishlist全部预处理还是用到了某一个name再处理这一条的内容再缓存,就看你的需求了。
给一个比较傻的方法,把属性转成string再比较 :)
我也试个,尽量用一个for:
楼主,这是要根据关键字weight来关键字来关联两组数据???
O(n)搞之,先遍历presents,把要求的东西存到一个标记数组里面,key可以设置为(size: "medium", clatters: "a bit", weight: "medium",key怎么存自己搞定),value为1,保证唯一,然后扫一下wishlist数组,看生成的key是否在标记数组里面,如果在则输出。尽提供思路。
简单实现 时间复杂度o(n*m)。用到了ES5的数组map方法。在nodejs 5.3下测试通过。考虑到了不固定属性名。
下面时间复杂度为n²
时间复杂度O(n+m)
过了之后看了一下其他人的答案。。。虽然用全了特性,但是效率低,但是毕竟是javascript,谁在意性能呢;)
一个比较懒的写法