本文介绍了Node.js + objectArray的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的节点应用程序中,我必须从另一个对象数组构造一个对象数组。
In my node app i have to construct an object array from another object array.
将我的对象数组视为......
Consider my object array as...
levels: [
{
country_id: 356,
country_name: "aaa",
level0: "bbbb",
level1: "cccc",
level2: "dddd",
level3: "eeee",
level4: "fffff"
},
{
country_id: 356,
country_name: "aaaa",
level0: "bbbb",
level1: "cccc",
level2: "dddd",
level3: "eeee",
level4: "gggg"-----------> here is the differnce..
}
]
如果是相同的id任何上面的1是不同的我必须使它成为一个数组,应该是1 id的单个条目。
If for same id any 1 of the above is different i have to make it an array and should be single entry for 1 id.
所以我想要的是:
levels: [
"356":{
country_name: "aaa",
level0: "bbbb",
level1: "cccc",
level2: "dddd",
level3: "eeee",
level4: ["fffff","gggg"]
}]
但是我无法正确地做到这一点。请帮我解决这个问题。谢谢你提前。
But i cant get the right way to do it.Please help me to solve this.Thanks in advance.
推荐答案
注意:请注意,此程序假设只有两次重复等级。
Note: Please note that, this program assumes that there are only two repetitions in the levels.
var obj = {
levels: [{
country_id: 356,
country_name: "aaa",
level0: "bbbb",
level1: "cccc",
level2: "dddd",
level3: "eeee",
level4: "fffff"
}, {
country_id: 356,
country_name: "aaa",
level0: "bbbb",
level1: "cccc",
level2: "dddd",
level3: "eeee",
level4: "gggg"
}]
};
obj.levels = obj.levels.reduce(function(result, current) {
result[current.country_id] = result[current.country_id] || {};
var temp_result = result[current.country_id];
for (var key in current) {
if (temp_result.hasOwnProperty(key) === false) {
temp_result[key] = current[key];
} else if (temp_result[key] !== current[key]) {
temp_result[key] = [temp_result[key], current[key]];
}
}
return result;
}, {})
console.log(obj);
输出
{ levels:
{ '356':
{ country_id: 356,
country_name: 'aaa',
level0: 'bbbb',
level1: 'cccc',
level2: 'dddd',
level3: 'eeee',
level4: ['fffff', 'gggg'] } } }
这是一个通用解决方案,
And this is a generic solution,
obj.levels = obj.levels.reduce(function(result, current) {
result[current.country_id] = result[current.country_id] || {};
var temp_result = result[current.country_id],
toString = Object.prototype.toString;
for (var key in current) {
if (temp_result.hasOwnProperty(key) === false) {
temp_result[key] = current[key];
} else if (toString.call(temp_result[key]) === "[object Array]") {
if (temp_result[key].every(function(currentItem) {
return currentItem !== current[key];
})) {
temp_result[key].push(current[key]);
}
} else if (temp_result[key] !== current[key]) {
temp_result[key] = [temp_result[key], current[key]];
}
}
return result;
}, {});
这篇关于Node.js + objectArray的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!