我正在實現節點的本地模塊,並試圖返回看起來像一個數組,但由本機數據支持的東西。目前我創建一個ObjectTemplate並使用SetIndexedPropertyHandler,所以我可以處理從JS獲取索引的嘗試。這一切都有效,但從JS看起來只是一個Object而不是一個Array。有什麼辦法可以讓這看起來更像一個數組?如何從節點插件返回看起來像數組的東西?
2
A
回答
1
您可以返回Object.entries(object)
。
的
Object.entries()
方法返回給定 對象自己的可枚舉的屬性[key, value]
對陣列,在同樣的 順序作爲由for...in
環路提供(不同之處在於一個for-in
環枚舉在原型側鏈性質以及)。
1
所有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中有一個例子。
0
你可以考慮圍繞一個真實數組使用一個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
在javascript中原型繼承Array
也是完全有效的。
相關問題
- 1. jQuery如何使返回值看起來像一個數組?
- 2. 如何從AlamoFire返回的東西?
- 3. 節點JS回報不返回任何東西
- 4. 如何讓一些東西看起來像從jquery頂部展開
- 5. Javascript工具用於構建看起來像有線節目指南的東西
- 6. 節點中像bash -x的東西
- 7. 按鈕看起來停用,直到我點擊的東西
- 8. XML選擇單個節點不返回任何東西
- 9. 傳遞的節點的數組起作用並返回節點
- 10. 爲什麼返回Object.keys()一個對象(看起來像數組)?
- 11. 沒有從sqlsrv_num_rows返回任何東西
- 12. PHP:如何返回正確的東西
- 13. 如何找到沒有東西時返回其他東西?
- 14. 函數strpos()不返回任何東西
- 15. getimagesize函數不返回任何東西
- 16. JavaScript函數不返回任何東西
- 17. get_post_type()函數不返回任何東西
- 18. 如果respond_to?不返回任何東西
- 19. 祕銀組件不返回任何東西
- 20. 如何返回節點js中的數組數組?
- 21. mysql_fetch_array返回兩樣東西
- 22. 獲取資源數組手動元素返回任何東西
- 23. 的getJSON不返回任何東西
- 24. WebClient的DownloadString不返回任何東西
- 25. List.First不返回任何東西,雖然有東西
- 26. 如何從java中的POJO類返回多個東西
- 27. 與看起來像奇怪的遞歸模板模式的東西混淆
- 28. 上傳圖片到Etsy返回「元數據看起來不像_FILES數組」
- 29. 爲什麼我的數組數組沒有返回任何東西?
- 30. 我如何在T-SQL中對任何看起來像數字的東西進行排序?