如果我有一个对象数组
var myArray = []
填充
var myObject = {
id: 1,
name: 'example'
}
让我们说'myArray'有6个'myObjects',其中一半共享相同的id,我想要一个用id分隔'myObjects'的函数,这样我就可以将它们传递给另一个需要id的函数分开。
myArray数据有一个rythme。
2 * 3(6)'myObjects'的例子,其中一半有一个相似的id:[id:1,id:2,id:3,id:1,id:2,id:3]
我希望它成为3个阵列。 [id:1,id:1] [id:2,id2] [id:3,id:3]
我怎样才能以简单有效的方式做到这一点?
答案 0 :(得分:1)
这是一个提案,其中有一个临时对象作为对分组ID的项目的引用。
var data = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 1 }, { id: 2 }, { id: 3 }],
result = [];
data.forEach(function (a) {
if (!this[a.id]) {
this[a.id] = [];
result.push(this[a.id]);
}
this[a.id].push(a);
}, {});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个,输出是数组数组。
&#13;
var myArray = [
{id: 1,name: 'example'},
{id: 2,name: 'example'},
{id: 3,name: 'example'},
{id: 1,name: 'example'},
{id: 2,name: 'example'},
{id: 3,name: 'example'},
{id: 1,name: 'example'},
{id: 2,name: 'example'},
{id: 3,name: 'example'}
]
var tempObj = {};
$.each(myArray, function(index, value) {
if (!tempObj[value.id]) {
tempObj[value.id] = [];
}
tempObj[value.id].push(value);
});
finalArray = []
$.each(tempObj, function(i, v) {
finalArray.push(v);
});
document.write(JSON.stringify(finalArray));
&#13;
答案 3 :(得分:0)
未优化,但是工作示例:
var array = [{id:1},{id:2},{id:3},{id:1},{id:2},{id:3}];
var resultObj = {};
var resultArray = [];
array.forEach(function(x) {
//get the id
var id = x.id;
//if id is unknown, add new key to resultObj
if (!resultObj.hasOwnProperty(id)) {
resultObj[id] = [];
}
//add object to id
resultObj[id].push(x);
});
//loop over resultObj keys
for (var key in resultObj) {
if (resultObj.hasOwnProperty(key)) {
//push array to 2dArray
resultArray.push(resultObj[key]);
}
}
//show results
console.log(resultObj);//{1:[{id:1}, {id:1}], 2:[...], ...]}
console.log(resultArray);//[[{id:1}, {id:1}], [...], ...]
答案 4 :(得分:0)
这是一个Vanilla JavaScript版本,它可以完成整理,但它可以完成工作。
所有这一切都是循环array
objects
loop
,id
将object
的{{1}}推送到临时array
(跟踪ids
)在array
中使用masterArr
创建一个新的object
,在每个后续loop
上检查是否存在id
存在相同array
的条目,如果它确实将其添加到正确的位置,则会创建一个包含object
的新id
并跟踪idArr
中的function filterArray(arr) {
var masterArr = [], idArr = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (i === 0) {
idArr.push(arr[i].id);
masterArr.push([arr[i]]);
} else {
var idCheck = idArr.indexOf(arr[i].id);
if (idCheck > -1) {
masterArr[idCheck].push(arr[i]);
} else {
idArr.push(arr[i].id);
masterArr.push([arr[i]]);
}
}
}
return masterArr;
}
1}}再次。
var mappedArray = filterArray(myArray);
然后你就像这样称呼它
TextInput