2015-06-10 50 views
1

我試圖將此數組轉換爲對象。使用下劃線,我想這個數組轉換:下劃線將數組轉換爲對象鍵

[ 
{ 
    "id": "parentA", 
    "children": [ 
     { 
      "name": "name1" 
     }, 
     { 
      "name": "name2" 
     }, 
     { 
      "name": "name3" 
     } 
    ] 
}, 
{ 
    "id": "parentB", 
    "children": [ 
     { 
      "name": "name4" 
     }, 
     { 
      "name": "name5" 
     }, 
     { 
      "name": "name6" 
     } 
    ] 
}] 

成一個對象,它看起來像這樣:

{ 
    "name1": "parentA", 
    "name2": "parentA", 
    "name3": "parentA", 
    "name4": "parentB", 
    "name5": "parentB", 
    "name6": "parentB" 
} 

我真的只是尋找可能的最清潔/最簡單的方法。

回答

0

這裏有一個相當短的方式做到這一點有兩個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>

+0

輸出,這是我used.worked偉大就像allvideolectures,謝謝! –

0

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>

+0

非常感謝! –

0

你只需要使用,如果你是下劃線支持瀏覽器沒有本地reduce和forEach數組方法,但喲你可以這樣做。

var result = _.reduce(array, function(memo, entry) { 
    _.each(entry.children, function(child) { 
     memo[child.name] = entry.id; 
    }); 
    return memo; 
}, {}); 
0
function expand(list){ 
    return _.reduce(list,function(a,b) { 
     _.each(b.children, function(c) { 
     a[c.name] = b.id; 
    }); 
    return a; 
    },{}); 
} 

,因爲我的問題是使用下劃線檢查您的樣品here