underscore.js 的对象转换
object transformation with underscore.js
无论出于何种原因,我在尝试转换对象和数组时遇到了很多困难。
我的当前数据存储在 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
有关,但我不确定为什么我无法弄清楚。请指教
你并不真的需要 Underscore,这只是正常的 Array.prototype.map 方法用法(尽管 Underscore 也提供了这个方法):
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>';
另请注意,您的第二个数据结构没有意义,因为它是不规则的,所以不要使用它,一点也不方便。
这里是对应的 Underscore 版本:
// Or Underscore version
var result = _.map(data, function(el) {
return {value: el._id, label: el.name};
});
在简单的 Javascript 中,您可以使用 Array.prototype.forEach()
遍历数组并组装对象并将其推送到想要的结果。
The forEach()
method executes a provided function once per array element.
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
}});
您感兴趣的另一个结果的概念相同。
无论出于何种原因,我在尝试转换对象和数组时遇到了很多困难。
我的当前数据存储在 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
有关,但我不确定为什么我无法弄清楚。请指教
你并不真的需要 Underscore,这只是正常的 Array.prototype.map 方法用法(尽管 Underscore 也提供了这个方法):
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>';
另请注意,您的第二个数据结构没有意义,因为它是不规则的,所以不要使用它,一点也不方便。
这里是对应的 Underscore 版本:
// Or Underscore version
var result = _.map(data, function(el) {
return {value: el._id, label: el.name};
});
在简单的 Javascript 中,您可以使用 Array.prototype.forEach()
遍历数组并组装对象并将其推送到想要的结果。
The
forEach()
method executes a provided function once per array element.
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
}});
您感兴趣的另一个结果的概念相同。