[英]Underscore Convert array to object keys
I am trying to convert this array to an object. 我试图将此数组转换为对象。 Using underscore, I want to convert this array :
使用下划线,我要转换此数组:
[
{
"id": "parentA",
"children": [
{
"name": "name1"
},
{
"name": "name2"
},
{
"name": "name3"
}
]
},
{
"id": "parentB",
"children": [
{
"name": "name4"
},
{
"name": "name5"
},
{
"name": "name6"
}
]
}]
into an object that looks like this: 变成一个看起来像这样的对象:
{
"name1": "parentA",
"name2": "parentA",
"name3": "parentA",
"name4": "parentB",
"name5": "parentB",
"name6": "parentB"
}
I'm really just looking for the cleanest/simplest way possible. 我真的只是在寻找最干净/最简单的方法。
Here's a fairly short way to do it with two reduce
: 这是使用两个
reduce
的相当短的方法:
var data = [ { "id": "parentA", "children": [ { "name": "name1" }, { "name": "name2" }, { "name": "name3" } ] }, { "id": "parentB", "children": [ { "name": "name4" }, { "name": "name5" }, { "name": "name6" } ] }]; var out = _.reduce(data, function(result, parent) { _.reduce(parent.children, function(r, child) { r[child.name] = parent.id; return r; }, result); return result; }, {}); document.write(JSON.stringify(out));
<script src="http://underscorejs.org/underscore-min.js"></script>
var a = [{ "id": "parentA", "children": [{ "name": "name1" }, { "name": "name2" }, { "name": "name3" }] }, { "id": "parentB", "children": [{ "name": "name4" }, { "name": "name5" }, { "name": "name6" }] }]; var new_obj = {}; var len = a.length; for (j = 0; j < len; j++) { var c = $.extend({}, a[j]); var children_length = (c.children).length; for (i = 0; i < children_length; i++) { var temp = ((a[j].children)[i]).name; new_obj[temp] = c.id; } } document.write(JSON.stringify(new_obj));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
You'll only need to use underscore if you're supporting browsers without native reduce and forEach array methods, but you can do it like this. 如果要支持没有本机reduce和forEach数组方法的浏览器,则只需要使用下划线,但是您可以这样做。
var result = _.reduce(array, function(memo, entry) {
_.each(entry.children, function(child) {
memo[child.name] = entry.id;
});
return memo;
}, {});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.