Mootools конвертирует Hash в массив - PullRequest
1 голос
/ 03 марта 2011

У меня есть Hash obj:

<code>
var obj = {a,b,c,...};
obj = $H(obj);
Мне нужно преобразовать его в простой массив
<code>
[a,b,c,..]
Как я могу сделать? Thx.

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

, поскольку вы используете $ HI, я предполагаю более раннюю версию mootools, 1.2.x, поскольку она устарела в 1.3 в пользу нового объекта.construct

Хеш имеет метод .each:

var Hobj = $H({
    tool: "bar",
    ghost: "goblin"
});

var arr = [];

Hobj.each(function(value, key) {
    arr.push(value); // what to do with key?
});

console.log(arr);

альтернатива, которая захватывает завершенные объекты с их ключами, но не как ключи массива:

Hobj.each(function(value, key) {
    var obj = {};
    obj[key] = value;
    arr.push(obj);
});
2 голосов
/ 03 марта 2011

Object.getValues(myObject) для получения массива всех значений.

Object.getKeys(myObject) для получения массива ключей.

Для 1.2 просто Hash предоставляет те же методы.

И не используйте Objects {} для хранения списков, как в вашем примере.Arrays для списков, Objects для ассоциативных массивов .

РЕДАКТИРОВАНИЕ :
С версии 1.3 Object.getValues и Object.getKeysустарела и заменена на Object.keys или Object.values.

0 голосов
/ 03 марта 2011

Предполагая, что вы хотите значения в массиве:

var arr = [];
for(var prop in obj){
    if(obj.hasOwnProperty(prop)){
        arr.push(obj[prop]);
    }
}

Если вы хотите, чтобы имена свойств были в массиве:

var arr = [];
for(var prop in obj){
    if(obj.hasOwnProperty(prop)){
        arr.push(prop);
    }
}

, вызов hasOwnProperty важен, потому что он будетотфильтровывать унаследованные функции и закрытые члены хеш-класса mooTools, которые вам, вероятно, не нужны в результирующем массиве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...