我的问题与this问题有关。你必须先阅读它。
var ids = "1*2*3";
var Name ="John*Brain*Andy";
var Code ="A12*B22*B22";
现在我有一个javascript对象数组。我想根据CODE
对对象进行分组。因此,该代码字符串中可能存在重复的代码。
根据上面改变的字符串,我和Brain和Andy有相同的代码。所以,现在我想要两个数组。在一个对象中只有一个对象只包含John的细节,在另一个对象中将有两个对象包含Brain和Andy的细节。
仅举例来说,我已经拍摄了3件物品。实际上可以有很多,也可以有许多不同的代码。
更新
我需要像@Pointy那样构建在groupMap对象中的结构。但我会用@ patrick的代码来实现这个结构。非常感谢他们两人。
答案 0 :(得分:1)
代码:
function toGroups(ids, names, codes) {
ids = ids.split('*');
names = names.split('*');
codes = codes.split('*');
if (ids.length !== names.length || ids.length !== codes.length)
throw "Invalid strings";
var objects = [], groupMap = {};
for (var i = 0; i < ids.length; ++i) {
var o = { id: ids[i], name: names[i], code: code[i] };
objects.push(o);
if (groupMap[o.code]) {
groupMap[o.code].push(o);
else
groupMap[o.code] = [o];
}
return { objects: objects, groupMap: groupMap };
}
您想要的“两个数组”将位于该函数返回的对象的“groupMap”属性中。
答案 1 :(得分:1)
要告诉你想要的确切结果有点难。
此代码:
// Split values into arrays
Code = Code.split('*');
Name = Name.split('*');
ids = ids.split('*');
// cache the length of one and create the result object
var length = Code.length;
var result = {};
// Iterate over each array item
// If we come across a new code,
// add it to result with an empty array
for(var i = 0; i < length; i++) {
if(Code[i] in result == false) {
result[ Code[i] ] = [];
}
// Push a new object into the Code at "i" with the Name and ID at "i"
result[ Code[i] ].push({ name:Name[i], id:ids[i] });
}
会产生这种结构:
// Resulting object
{
// A12 has array with one object
A12: [ {id: "1", name: "John"} ],
// B22 has array with two objects
B22: [ {id: "2", name: "Brain"},
{id: "3", name: "Andy"}
]
}