Я реализую собственный модуль для узла и пытаюсь вернуть что-то, что похоже на массив, но поддерживается встроенными данными. На данный момент я создаю ObjectTemplate и используя SetIndexedPropertyHandler, поэтому я могу обрабатывать попытки получить индексы от JS. Все это работает, но из JS это выглядит как объект, а не массив. Есть ли способ сделать это больше похожим на массив?Как я могу вернуть что-то, что похоже на массив из аддона узла?
ответ
Вы можете вернуть Object.entries(object)
.
Метод
Object.entries()
возвращает массив собственного перечислимы свойство[key, value]
пар данного объекта, в том же порядке, как это предусмотрено вfor...in
петли (разница в том, чтоfor-in
цикл перебирает свойства в цепочке прототипов также).
Все arraylike объекты должны иметь length
. До тех пор, как они есть, что собственность, вы можете взять Array
функции и запустить их на объект (например, Array.prototype.forEach.call(obj, ...)
), или в ES6 запустить Array.from
на нем:
obj = {
0: "foo",
1: "bar",
length: 2
};
// ES5 way to get a real array:
console.log(Array.prototype.slice.call(obj));
// ES6 way to get a real array:
console.log(Array.from(obj));
Если вы действительно хотите возвратите массив, а не объект arraylike, тогда я предлагаю вам использовать array = Array::New()
и array->Set(index, element)
вместо ObjectTemplate
. Пример: this question.
Вы можете использовать Proxy вокруг реального массива с ловушками/обработчиками, которые взаимодействуют с вашим родным объектом. Существует ограничение производительности для использования прокси (не пытайтесь перебирать прокси-массив, если это важный, горячий кодовый путь), но они позволяют делать что угодно.
var _arr = [];
var arraylike = new Proxy(_arr, {
get: function (target, prop) {
// Interface with your native object here.
if (prop === "length") return 20;
return "hello";
}
});
// Consume
> arraylike.length
20
> arraylike[5]
"hello"
> arraylike instanceof Array
true
> Array.isArray(arraylike)
true
Это также отлично действует до прототипически наследовать от Array
в JavaScript.
- 1. Как я могу вернуть массив?
- 2. как я могу вернуть массив
- 3. Как я могу вернуть все пути из одного узла?
- 4. Как я могу вернуть массив C++?
- 5. Как я могу вернуть массив из функции в классическом asp?
- 6. Как я могу вернуть массив обещаний из предложения then
- 7. Как я могу импортировать код python из аддона передачи?
- 8. Как я могу вернуть массив из функции без использования malloc?
- 9. Как правильно создать объект Buffer из корневого аддона узла?
- 10. Как я могу вернуть указатель на массив в C++?
- 11. Как я могу вернуть что-то из случая HashMap.get None?
- 12. Как я могу вернуть что-то рано из блока?
- 13. Neo4j Как я могу вернуть оба узла и отношения?
- 14. Я могу только вернуть 1 массив
- 15. Конфигурации чтения аддона-cli-аддона
- 16. Обнаружение другого аддона из моего аддона
- 17. Могу ли я отключить компоненты Firefox/Chrome из аддона/расширения?
- 18. Как вернуть переменную из обещания Q-узла?
- 19. Как я могу вернуть переменную из функции
- 20. Как я могу вернуть значение из GM_xmlhttprequest?
- 21. Как я могу вернуть DataFrame из функции
- 22. Что именно я могу вернуть из запроса jQuery AJAX?
- 23. Как я могу вернуть список из класса
- 24. Как я могу вернуть значение из getJSON?
- 25. Как я могу вернуть значение Maybe из обозначений в PureScript?
- 26. Как вернуть имя узла из QTreeView
- 27. Как вернуть массив из функции?
- 28. Как я могу безопасно вернуть массив bash через ssh?
- 29. Как я могу вернуть массив, созданный в javascript цикла?
- 30. как вернуть массив из функции