0
我有表示相同的數據這2個陣列:不均勻的陣列,如concatAll功能
array1 = [
{name: "max", age: 30},
{name: "paul"},
{name: "paul.Jack", age: 25},
{name: "max.David"},
{name: "max.Sylvia", age: 27},
{name: "paul.Jack.Ned"},
{name: "paul.Jack.Mike"},
{name: "max.David.Jeff"},
{name: "max.Sylvia.Anna", age: 5},
{name: "max.David.Buffy"},
{name: "max.Sylvia.Craig"},
{name: "max.Sylvia.Robin"}
];
array2 = [
{
name: "max",
age: 30,
children: [
{
name: "Sylvia",
age: 27,
children: [
{name: "Anna", age: 5},
{name: "Craig"},
{name: "Robin"}
]
},
{
name: "David",
children: [
{name: "Jeff"},
{name: "Buffy"}
]
}
]
},
{
name: "paul",
children: [
{
name: "Jack",
age: 25,
children: [
{name: "Ned"},
{name: "Mike"}
]
}
]
}
];
我的目標是具有不均勻的一個函數,它變換ARRAY1到數組2,我使用的lodash到做到這一點這裏的地方我現在是:
要unEven
數組1到數組2在這種情況下,「名稱」包含有關禁止新的數組中此項目應推動信息的跟蹤性能檢查這個js bin,這項工作對於3級嵌套數組,但我的目標是讓它不受嵌套級別的限制,這就是我卡住的地方。
unEven函數將像這個video中的concatAll函數一樣。
這裏的不均勻功能:
Array.prototype.unEven = function (trackingProperty, children, resultArray) {
var newItem, prop, index, parent, subParent, subParentIndex;
resultArray = resultArray || [];
this.forEach(function (item) {
newItem = lodash.omit(item, trackingProperty);
prop = lodash.pick(item, trackingProperty);
if (prop[trackingProperty].indexOf('.') === -1) {
resultArray.push(item);
} else {
newItem[trackingProperty] = prop[trackingProperty].split(".");
parent = {};
parent[trackingProperty] = newItem[trackingProperty][0];
index = lodash.indexOf(resultArray, lodash.find(resultArray, parent));
if (newItem[trackingProperty].length === 2) {
newItem[trackingProperty] = newItem[trackingProperty][1];
if (!Array.isArray(resultArray[index][children])) {
resultArray[index][children] = [];
}
resultArray[index][children].push(newItem);
} else if (newItem[trackingProperty].length === 3) {
subParent = {};
subParent[trackingProperty] = newItem[trackingProperty][1];
subParentIndex = lodash.indexOf(resultArray[index][children], lodash.find(resultArray[index][children], subParent));
newItem[trackingProperty] = newItem[trackingProperty][2];
if (!Array.isArray(resultArray[index][children][subParentIndex][children])) {
resultArray[index][children][subParentIndex][children] = [];
}
resultArray[index][children][subParentIndex][children].push(newItem);
}
}
});
return resultArray;
};
給我的使用情況這個我想使我的應用程序angular ui router將從路由JSON文件生成一個d3js tree layout,因爲我做的路由JSON文件。
爲什麼不使用jQuery.extend?看到這裏:http://jsbin.com/pujuniweje/1/edit?js,console – Fourat 2015-03-31 10:56:14
這不會做我想要的我想要將array1轉換爲array2不擴展它們或將它們合併在一起。 檢查我提供的http://jsbin.com/welesoqige/2/edit?js,console並沒有給出與您的輸出相同的輸出。 – 2015-03-31 11:02:18
對不起,我覺得我不明白這件不可思議的事情。但是你說有一個跟蹤屬性,可以用它來映射array2中的對象,換句話說,您需要將元素的子項與名稱相加,並將它們添加到當前對象中。 我提供的代碼做了你想要的名字是最大的一個元素。 這是一個pastebin(第一個對象是你的,第二個是我的):http://pastebin.com/kEsZJn1Q – Fourat 2015-03-31 11:15:45