使用underscore.js进行对象转换

object transformation with underscore.js

本文关键字:对象 转换 underscore js 使用      更新时间:2023-09-26

无论出于何种原因,我在尝试转换对象和数组时都会遇到相当大的困难。

我的当前数据存储在mongodb集合中,如下所示:

[{ "_id" : 1, "name" : "someName", "colorName" : "Pink"},
{ "_id" : 2, "name" : "someName2", "colorName" : "RoyalBlue"},
{ "_id" : 3, "name" : "aThirdOne", "colorName" : "Gold"},
{ "_id" : 4, "name" : "oneMore", "colorName" : "LightGreen"}]

我需要获得以下两个数组中的,但我想知道如何同时获得这两个数组。

[{ "value" : 1, "label" : "someName"},
{ "value" : 2, "label" : "someName2"},
{ "value" : 3, "label" : "aThirdOne"},
{ "value" : 4, "label" : "oneMore"]
[{1 : "someName"},
{2 : "someName2"},
{3 : "aThirdOne"},
{4 : "oneMore"}]

我知道这可能是_.map的问题,但我不确定为什么我不能弄清楚。请告知。

您并不真正需要Undercore,这只是Array.prototype.map方法的正常使用(尽管Undercore也提供此方法):

var data = [{ "_id" : 1, "name" : "someName", "colorName" : "Pink"},
    { "_id" : 2, "name" : "someName2", "colorName" : "RoyalBlue"},
    { "_id" : 3, "name" : "aThirdOne", "colorName" : "Gold"},
    { "_id" : 4, "name" : "oneMore", "colorName" : "LightGreen"}];
    
var result = data.map(function(el, i) {
    return {value: el._id, label: el.name};
});
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 4) + '</pre>';

还要注意,你的第二个数据结构没有意义,因为它是不规则的,所以不要使用它,它一点也不方便。

下面是相应的Undercore版本:

// Or Underscore version
var result = _.map(data, function(el) {
    return {value: el._id, label: el.name};
});

在纯Javascript中,您可以使用Array.prototype.forEach()对数组进行迭代,组装对象,并将其推送到所需的结果。

forEach()方法对每个数组元素执行一次所提供的函数。

var array = [{ "_id": 1, "name": "someName", "colorName": "Pink" }, { "_id": 2, "name": "someName2", "colorName": "RoyalBlue" }, { "_id": 3, "name": "aThirdOne", "colorName": "Gold" }, { "_id": 4, "name": "oneMore", "colorName": "LightGreen" }],
    result1 = [],
    result2 = [];
array.forEach(function (a) {
    result1.push({ value: a._id, label: a.name });
    var o = {};
    o[a._id] = a.name
    result2.push(o);
});
document.write('<pre>' + JSON.stringify(result1, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(result2, 0, 4) + '</pre>');

使用:

var newObject = _.map(yourObject, function(val) {
return {
    "value": val._id,
    "label": val.name
}});

对于你感兴趣的其他结果也是同样的概念。