[英]Insert element inside another element in the same array
我一直在寻找一个没有运气的解决方案。 我有一个JSON对象:
arr = [
{
"id": "1",
"dataId" : "",
"rel": ""
},
{
"id": "2",
"dataId" : "",
"rel": ""
},
{
"id": "3",
"dataId" : "",
"rel": ""
},
{
"id": "4",
"dataId" : "1",
"rel": ""
}];
我需要一种方法来使用javascript处理此数组(允许使用jquery),因此,当“ arr [a] .dataId”与“ arr [b] .id”匹配时,采用“ arr [a]”元素并插入“ arr [b]“创建一个新的数组,如下所示:
newArr = [
{
"id": "1",
"dataId" : "",
"rel" : [
{
"id": "4",
"dataId" : "1"
}
]
},
{
"id": "2",
"dataId" : "",
"rel": ""
},
{
"id": "3",
"dataId" : "",
"rel": ""
}
];
希望您能理解我的要求,我们将不胜感激。 提前致谢
尝试这个:
var arr = [
{
"id": "1",
"dataId" : "",
"rel": ""
},
{
"id": "2",
"dataId" : "",
"rel": ""
},
{
"id": "3",
"dataId" : "",
"rel": ""
},
{
"id": "4",
"dataId" : "1",
"rel": ""
}];
$(arr).each(function(index,value){
if(value.dataId)
{
$(arr).each(function(ind,val){
if(val.id==value.dataId)
{
if(val.rel)
{
val.rel.push({"id":value.id,"dataId":value.dataId});
}
else
{
val.rel=[{"id":value.id,"dataId":value.dataId}];
}
}
});
}
});
console.log(arr);
这确实会移动元素,并且在对其进行迭代时不会操纵数组。 也不需要扩展Array.prototype。 缺点之一是您将在数组中产生孔(元素的索引不会从0到length-1的索引),但是据我所知,这在您的用例中并不重要。
var arr = [
{
"id": "1",
"dataId" : "",
"rel": ""
},
{
"id": "2",
"dataId" : "3",
"rel": ""
},
{
"id": "3",
"dataId" : "",
"rel": ""
},
{
"id": "4",
"dataId" : "1",
"rel": ""
}];
var indexesToMoveMap = {};
$.each(arr, function(outerIndex, outerElem) {
if (outerElem.dataId) {
$.each(arr, function(innerIndex, innerElem) {
if (innerElem.id === outerElem.dataId) {
indexesToMoveMap[outerIndex] = innerIndex;
}
});
}
});
$.each(indexesToMoveMap, function(indexToMove, indexToMoveTo) {
arr[indexToMoveTo].rel = arr[indexToMoveTo].rel || [];
arr[indexToMoveTo].rel.push(arr[indexToMove]);
delete arr[indexToMove];
});
console.log(arr);
像这样吗
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
var arr = [
{
"id": "1",
"dataId" : "",
"rel": []
},
{
"id": "2",
"dataId" : "",
"rel": []
},
{
"id": "3",
"dataId" : "",
"rel": []
},
{
"id": "4",
"dataId" : "1",
"rel": []
}];
var index = 0;
for ( var m = 0; m < arr.length; m++ ) {
for ( var i = 0; i < arr.length; i++ ) {
if ( arr[index].id === arr[i].dataId ) {
arr[index].rel.push (arr[i]);
arr.remove(i);
}
}
index++;
}
console.log(JSON.stringify(arr, null, 4))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.