multidimensional array with key/value pair

Post Reply
User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

multidimensional array with key/value pair

Post by vasilev » Fri Sep 04, 2020 8:07 am

здравейте,
изписвам на анлгийски за да го намират и от други държави :)
имам следният масив:

Code: Select all

[
{"name":"тест","age":12,"children":[1,2],"parent":[]},
{"name":"тест2","age":12,"children":[],"parent":[0]},
{"name":"тест3","age":12,"children":[],"parent":[0]}
]
всичко е ок, тъй като ключовете са 0,1,2 , въпросът е ако изтрия 0, то 1, 2 вече са други стойности и 0 - parent го няма.
затова искам да създам същият масив но с уникален ключ създаден по подобен начин:

Code: Select all

var obj = new Array;
      obj['8374jd8u'] = new Array;
      obj['8374jd8u']['age'] = "12";
      obj['8374jd8u']['name'] = "demo demov";
      obj['test'] = new Array;
      obj['test']['age'] = "12";
      obj['test']['name'] = "demo demov";
така се създава :

Code: Select all

[
{"key1":
{"name":"тест","age":12,"children":[1,2],"parent":[]}
},
{"key2":
{"name":"тест2","age":12,"children":[],"parent":[0]}
},
{"key3":
{"name":"тест3","age":12,"children":[],"parent":[0]}
}
]

не мога да го обходя вече..

Code: Select all

this.tree.forEach(function(element, index) {
            if (element.parent.length == 0) { ..... 

въпросът ми е - така ли е правилно и ако не - как бих могъл да използвам key/value pair. по този начин ако изтрия някой ключ, то другите няма да заемат други стойности ..

мерси !

User avatar
deam0n
Web-tourist
Web-tourist
Posts: 3027
Joined: Sat Oct 01, 2005 4:33 pm
Answers: 204
Location: Шопландия
Contact:

Re: multidimensional array with key/value pair

Post by deam0n » Fri Sep 04, 2020 9:15 am

В случая масива с обектите трябва да изглежда по-скоро така:

Code: Select all

let data = [
    {
    "key": 1, "name":"тест","age":12,"children":[1,2], "parent":[]
    },

    {
    "key": 2', "name":"тест2","age":12,"children":[],"parent":[0]
    },

    {
    "key": 3, "name":"тест3","age":12,"children":[],"parent":[0]
    }
]

После много лесно можеш да правиш всякакви операции с lodash ( https://lodash.com/docs/4.17.15 )

Code: Select all

let key1 = _.find(data, function(o) { return o.key == 1; });

// parent length 0
let new_data = _.find(data, function(o) { return o.parent.length == 0; });

User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

Re: multidimensional array with key/value pair

Post by vasilev » Fri Sep 04, 2020 10:48 am

здравей,
да , но в такъв случай ако изтрия някой key, то другите трябва да ги ъпдейтна. а в данните са заложени именно тези ключове и малко са зависими..
може ли ключът да е уникален а не номер?

User avatar
deam0n
Web-tourist
Web-tourist
Posts: 3027
Joined: Sat Oct 01, 2005 4:33 pm
Answers: 204
Location: Шопландия
Contact:

Re: multidimensional array with key/value pair

Post by deam0n » Fri Sep 04, 2020 3:43 pm

Е то мисля, че при всички случаи ако изтриеш нещо, другите трябва да ги ъпдейтнеш където има зависимости?

Code: Select all

let data = [
    let data = {
    "key": 1, "name":"тест","age":12,"children":[1,2], "parent":[]
    },

    {
    "key": 2', "name":"тест2","age":12,"children":[],"parent":[1]
    },

    {
    "key": 3, "name":"тест3","age":12,"children":[],"parent":[1]
    }
]
Ако изтриеш реда с key 2 твоя масив ще изглежда ей така и трябва от този с key 1 да махнеш от children 2-ката, защото вече не съществува. Реално като триеш нещо стойноста на key, ще се запазва и след изтриването, за разлика от index-a.

Code: Select all

let data = [
    {
    "key": 1, "name":"тест","age":12,"children":[1,2], "parent":[]
    },
    {
    "key": 3, "name":"тест3","age":12,"children":[],"parent":[0]
    }
]
Не ти разбирам напълно въпроса какво те затруднява в случая :)

https://jsfiddle.net/k4rund6x/11/

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 891
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: multidimensional array with key/value pair

Post by Revelation » Fri Sep 04, 2020 4:53 pm

Асоциативен масив не съществува в JS.

Използвай си обект:

Code: Select all

{
    key1: {"name":"тест","age":12,"children":[1,2],"parent":[]},
    key2: {"name":"тест2","age":12,"children":[],"parent":[0]},
    key3: {"name":"тест3","age":12,"children":[],"parent":[0]}
}
После обхождай с lodash. Лодаш може да обхожда и обекти.

Code: Select all

let collection = {
    key1: {"name":"тест","age":12,"children":[1,2],"parent":[]},
    key2: {"name":"тест2","age":12,"children":[],"parent":[0]},
    key3: {"name":"тест3","age":12,"children":[],"parent":[0]}
};

_.each(collection, (value, key) => console.log(key, value));

User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

Re: multidimensional array with key/value pair

Post by vasilev » Fri Sep 04, 2020 8:16 pm

добре става..
супер ! благодаря :)


@deam0n ... сложно става да се ъпдейтва допълнително.

Post Reply