![](/img/trans.png)
[英]Vuejs Loop trough all children and execute a function for each iteration
[英]Javascript/jQuery - For each array iteration trough all multidimensional keys
我有一個具有以下結構的多維數組:
[13] => Array
(
[id] => 51
[text] => Corporate
[seltext] => Corporate
[parent_id] => 0
[object_type] => folder
[corefilename] =>
[userUNIQUE] =>
[nodes] => Array
(
[0] => Array
(
[id] => 50
[text] => Due diligence
[seltext] => Due diligence
[parent_id] => 51
[object_type] => folder
[corefilename] =>
[userUNIQUE] =>
)
[1] => Array
(
[id] => 2
[text] => Drafts
[seltext] => Drafts
[parent_id] => 51
[object_type] => folder
[corefilename] =>
[userUNIQUE] =>
[nodes] => Array
(
[0] => Array
(
[id] => 6
[text] => de
[seltext] => Decisions [parent_id] => 2
[object_type] => folder
[corefilename] =>
[userUNIQUE] =>
[nodes] => Array
(
[0] => Array
(
[id] => 44
[text] =>
[parent_id] => 6
[object_type] => file
[corefilename] => f-8TYO89KHTK1BNV4QMMAW6GHEEDRREECP1VDV4Y6VLXWM7XS97V4LCUWXJFM6E61VXF
[userUNIQUE] =>
我想獲取一直填充到數組中的所有“id”值 - 節點。 我試過迭代,但我唯一能達到的水平是第一個。
這是我試圖運行但沒有成功的 function:
var childs=$('#tree').treeview('getSelected', loc);
function getValuesByKey(object, key) {
var values = [];
recursiveFx(object);
function recursiveFx(object) {
for (var property in object) {
if (object.hasOwnProperty(property)) {
if (typeof object[property] == "object") {
recursiveFx(object[property]);
} else {
try {
if (isDefined(object[key])) {
console.log('value:',object[key]);
values.push(object[key]);
}
} catch (e) {
}
}
}
}
}
return values;
}
getValuesByKey(childs, 'id');
我究竟做錯了什么?
據我從您的數據中看到,您首先遍歷數組,而不是通過 object。 object 也可以使用相同的解決方案,但是,必須對屬性和數組元素進行迭代,除非您知道某些特定屬性將始終包含所有對象的數組。
這只是一個示例數據,以節省時間:
var data = [
{"id": 50},
{
"id": 35,
"nodes": [
{"id": 3},
{"id": 7},
{
"id": 9,
"nodes": [
{"id": 0},
{"id": 1}
]
},
]
},
];
接下來是您獲取 object 中的屬性,並檢查它是否具有該屬性,這將始終為真。
我建議您使用Array.isArray檢查特定字段是否為數組,並將新數組提供給 recursiveFx。
function getValuesByKey(arr, key) {
var values = [];
recursiveFx(arr);
function recursiveFx(arr) {
for (let el in arr) {
object = arr[el];
for(let property in object){
if(property === key){
values.push(object[property]);
} else if(Array.isArray(object[property])){
recursiveFx(object[property])
}
}
}
}
return values;
}
console.log(getValuesByKey(data, 'id'));
我認為您的數據是“數組”? 但var property in object
這是一個簡單的遞歸 function 來解決這類問題。
let test_data =
[{
"id": 1,
"somekey": "someval1",
"nodes": [{
"id": 2,
"somekey": "someval2",
"nodes": [{
"id": 4,
"somekey": "someval4"
}, {
"id": 5,
"somekey": "someval5",
"nodes": [{
"id": 6,
"somekey": "someval6"
}]
}]
}]
},
{
"id": 3,
"somekey": "someval3"
}
]
和遞歸 function:
const nodes_key = "nodes";
const key = "id";
let values = [];
function getValuesByKey(ary, key, nodes_key){
for ( object of ary ){
if (object.hasOwnProperty(key)) {
values.push(object[key]) ;
}
if ( object.hasOwnProperty(nodes_key) ){
getValuesByKey(object[nodes_key], key, nodes_key)
} // if it has child-nodes, just do same as above.. (pushes the value of key)
} // retrive each object in an Array
}
Output:
getValuesByKey(test_data, key, nodes_key)
> values
[ 1, 2, 4, 5, 6, 3 ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.