Javascript 通过比较父数组填充父对象
我有一个对象数组,其中再次包含父对象的id: 例如:- 我想将这个JSON转换成以下格式,因为我将用parentObject代替parentIdJavascript 通过比较父数组填充父对象,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个对象数组,其中再次包含父对象的id: 例如:- 我想将这个JSON转换成以下格式,因为我将用parentObject代替parentId $scope.result=[ { "id": 1, "name": ABC, "type": a, "parentId": { "id": 2, "name": PQR, "type": b,
$scope.result=[
{
"id": 1,
"name": ABC,
"type": a,
"parentId": {
"id": 2,
"name": PQR,
"type": b,
"parentId": 1
}
},
{
"id": 2,
"name": PQR,
"type": b,
"parentId": {
"id": 1,
"name": ABC,
"type": a
}
}
]
有人能帮我转换吗?假设
parentId
将引用一个元素
angular.forEach($scope.result, function(result) {
var obj = $scope.result.filter(function(ele) {
return result.parentId === ele.id;
})[0];
result.parentId = obj;
});
因为您的标记不包含angularjs,所以我在这里使用Array.prototype.forEach
$scope.result.forEach(function(result) {
var obj = $scope.result.filter(function(ele) {
return result.parentId === ele.id;
})[0];
result.parentId = obj;
});
将执行2个循环第一个循环用id的键填充哈希,第二个循环用实际对象替换父id:
$scope = {}
$scope.result=[
{
"id": 1,
"name": "ABC",
"type": "PQR",
"parentId": 2
},
{
"id": 2,
"name": "ABC",
"type": "PQR",
"parentId": 1
}]
parents = {}
for(i=0;i<$scope.result.length;i++){
parents[$scope.result[i]["id"]] = jQuery.extend({}, $scope.result[i]); // Clone object
}
for(i=0;i<$scope.result.length;i++){
$scope.result[i]["parentId"] = parents[$scope.result[i]["parentId"]]
}
$scope.result
$scope={}
$scope.result=[
{
“id”:1,
“名称”:“ABC”,
“类型”:“PQR”,
“家长ID”:2
},
{
“id”:2,
“名称”:“ABC”,
“类型”:“PQR”,
“家长ID”:1
}]
父母={}
对于(i=0;我将在$scope.result中拥有最终数组,对吗?是的,它将在$scope.result中。我在上面的代码中做了一个更改。请测试最新的代码。我将parentId设置为UnfinedUsingfilter
以查找数组中的单个项将非常低效,它将需要为每个项在整个数组中迭代一次在阵列中!如果它使用的数据集增长到甚至相当大的大小,这将变得非常慢非常快。更好的方法是,如果针对ES6兼容的浏览器和/或使用ES6到ES5的transpiler。或者,当您找到您需要的id时,您可以始终使用带有break
语句的普通旧for
循环oking for.@UselessCode是的,我同意你的观点。现在最好使用for循环with break语句。。
$scope = {}
$scope.result=[
{
"id": 1,
"name": "ABC",
"type": "PQR",
"parentId": 2
},
{
"id": 2,
"name": "ABC",
"type": "PQR",
"parentId": 1
}]
parents = {}
for(i=0;i<$scope.result.length;i++){
parents[$scope.result[i]["id"]] = jQuery.extend({}, $scope.result[i]); // Clone object
}
for(i=0;i<$scope.result.length;i++){
$scope.result[i]["parentId"] = parents[$scope.result[i]["parentId"]]
}
$scope.result