我正在使用一個對象作爲哈希表。我想快速打印出它的內容(例如alert()
)。有什麼內置的將散列轉換爲(鍵,值)對的數組?壓扁對象到數組?
壓扁對象到數組?
回答
我更新了這個更多一些。這比解析console.log要容易得多,因爲它省去了像__proto__
那樣的額外內容。
function flatten(obj) {
var empty = true;
if (obj instanceof Array) {
str = '[';
empty = true;
for (var i=0;i<obj.length;i++) {
empty = false;
str += flatten(obj[i])+', ';
}
return (empty?str:str.slice(0,-2))+']';
} else if (obj instanceof Object) {
str = '{';
empty = true;
for (i in obj) {
empty = false;
str += i+'->'+flatten(obj[i])+', ';
}
return (empty?str:str.slice(0,-2))+'}';
} else {
return obj; // not an obj, don't stringify me
}
}
我會做的唯一改進就是根據遞歸級別正確縮進。
你爲什麼要通過'console.log'選擇它?你爲什麼避開你的瀏覽器爲你提供的夢幻般的調試選項? –
誰說誰在逃避'console.log'?問題是如何平整數據。 'alert()'僅被提及「例如」。如果他想通過Ajax將其發送回服務器以便在那裏記錄,該怎麼辦? –
我知道'console.log',這對我的大多數調試需求來說確實很棒。但是有時候我發現使用alert可以準確找出事件發生的時間。直到警報發出後,代碼纔會執行,直到您確定警報。通常,當這種行爲不需要時,沒有什麼理由使用alert()。 –
不,我知道的。不過,你可以自己做相當簡潔:
var obj = { a: 1, b: 2, c: 3 };
var arr = [];
for (var i in obj) {
var e = {};
e[i] = obj[i];
arr.push(e);
}
console.log(arr);
// Output: [Object { a=1 }, Object { b=2 }, Object { c=3 }]
當然,你不能alert
這兩種,所以你還不如干脆console.log(obj)
擺在首位。
您能陣列輸出數組:
var obj = { a: 1, b: 2, c: 3 };
var arr = [];
for (var i in obj) {
arr.push([i, obj[i]]);
}
console.log(arr);
// Output: [["a", 1], ["b", 2], ["c", 3]]
alert(arr);
// Alert: a, 1, b, 2, c, 3
但同樣,EW。
既然你想alert
它我認爲它不是你的生產版本,並且舊的瀏覽器兼容性不是問題。
如果是這樣的話,那麼你可以這樣做:
var myHash = ......
alert(Object.keys(myHash).map(function(key) { return [key, myHash[key]]; }));
這很漂亮。 –
噢,是它是: '變種myUsers = {};' 'myUsers [0] = { 'ID': 'X', '用戶名': 'AAA'} \ N' 'myUsers [1 ] = {'id':'y','username':'bbb'}' 'Object.keys(myUsers).map(function(key){return myUsers [key] .username;})' Thanks ! – dirkk0
在alert
快速&骯髒的使用,你可以使用JSON
:
alert(JSON.stringify(yourObj).replace(/,/g,'\n'));
這裏是我的版本的它。它應該讓你變平輸入如下圖所示:
var input = {
a: 'asdf',
b: [1,2,3],
c: [[1,2],[3,4]],
d: {subA: [1,2]}
}
功能是這樣的:
function flatten (input, output) {
if (isArray(input)) {
for(var index = 0, length = input.length; index < length; index++){
flatten(input[index], output);
}
}
else if (isObject(input)) {
for(var item in input){
if(input.hasOwnProperty(item)){
flatten(input[item], output);
}
}
}
else {
return output.push(input);
}
};
function isArray(obj) {
return Array.isArray(obj) || obj.toString() === '[object Array]';
}
function isObject(obj) {
return obj === Object(obj);
}
用法是一樣的東西:
無功輸出= []
壓扁(輸入輸出);
然後輸出應該是扁平數組。
也許有點晚,但在這裏你有我的版本的答案,更新到ES2015。我用一個遞歸函數和它的作品,即使有主要對象內的其他對象:
function objectFlattener (object) {
return Reflect.apply(Array.prototype.concat, [], Object.keys(object).map(key => {
if (object[key] instanceof Object) {
return objectFlattener(object[key]);
}
return `${ key }: ${ object[key] }`;
}));
}
因此改變過去的回報,你可以將元素格式化您的數組中。
- 1. 壓扁嵌套數組/在underscore.js對象
- 2. 壓扁數組在對象中
- 3. 在PHP中壓扁數組
- 4. 如何使用Jolt來壓扁n個對象的json數組?
- 5. Python壓扁數組內部numpy數組
- 6. 無法理解`這個壓扁對象
- 7. 使用AutoMapper壓扁對象爲int
- 8. JSON對象壓扁CSV一行
- 9. 用Gorm壓扁對象模型?
- 10. With Underscore,我如何遞歸地壓扁一組對象?
- 11. 壓扁和重組提交
- 12. 壓扁元組列表
- 13. 壓扁
- 14. 對象映射 - 壓扁屬性,而不是對象引用
- 15. 如何在PHP中壓扁數組?
- 16. 壓扁多維數組遞歸php
- 17. 壓扁和計數1元組
- 18. 如何在jQuery中壓扁數組?
- 19. 試圖壓扁數組在numpy
- 20. 壓扁變長數組列表
- 21. 壓扁奇數組結構的JavaScript
- 22. 如何使用normalizr來壓扁具有不同類型對象的數組?
- 23. JSON到JSON轉換:壓扁
- 24. PHP遞歸收集SimpleXMLElement數據並壓扁數組數組
- 25. XSLT壓扁XML
- 26. 壓扁OCaml中
- 27. 壓扁RDD
- 28. 使用SQL壓扁數據
- 29. 如何在python中壓扁元組
- 30. 取消壓扁表
'console.log'或'console.dir'有什麼問題? – jAndy
控制檯有什麼問題。日誌()?爲什麼要提醒它從不顯示足夠的調試信息。新的瀏覽器控制檯應顯示足夠的信息,如果你console.log你的變量。此外,JS數組是對象..或者如果你願意,對象是關聯數組。 –
@ N.B. .: JS'Array's是'Object's;和JS'Object'模擬「關聯數組」的概念,但「關聯數組」和「數組」是不同的概念。我們不要混淆它們! OP的術語是現貨。 –