Tôi đang sử dụng một đối tượng làm bảng băm. Tôi muốn nhanh chóng in ra nội dung của nó (ví dụ: alert()
). Có bất kỳ thứ gì được tích hợp để chuyển đổi băm thành các mảng (khóa, giá trị) không?Làm phẳng đối tượng thành mảng?
Trả lời
tôi cập nhật này một số chi tiết. Việc phân tích cú pháp này dễ dàng hơn nhiều so với console.log vì nó bỏ qua các nội dung bổ sung có trong đó như __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
}
}
Điều duy nhất tôi sẽ làm để cải thiện điều này là nó đã thụt lề chính xác dựa trên mức đệ quy.
Tại sao bạn chọn điều này trên 'console.log'? Tại sao bạn tránh các tùy chọn gỡ lỗi tuyệt vời mà trình duyệt của bạn cung cấp cho bạn? –
Ai nói ai đó đã tránh được 'console.log'? Câu hỏi đặt ra là làm thế nào để làm phẳng dữ liệu. 'alert()' chỉ được đề cập "ví dụ". Điều gì sẽ xảy ra nếu anh ta muốn gửi nó trở lại máy chủ thông qua Ajax để được đăng nhập ở đó? –
Tôi biết về 'console.log' và nó chắc chắn là tuyệt vời cho hầu hết các nhu cầu gỡ lỗi của tôi. Tuy nhiên đôi khi tôi thấy hữu ích khi sử dụng cảnh báo để tìm hiểu chính xác khi có điều gì đó xảy ra. Mã trực tiếp sau khi cảnh báo không được thực hiện cho đến khi bạn OK cảnh báo. Nói chung khi hành vi này không được mong muốn, có rất ít lý do để sử dụng 'alert()'. –
Sử dụng vòng lặp for:
for (var x in yourObj)
{
alert(yourObj[x]);
}
theo cách đó bạn sẽ chỉ thấy các giá trị. Bute thậm chí nếu bạn tập trung các phím quá, nó sẽ cảnh báo nhiều lần có lẽ. Bạn nên tạo một chuỗi và cảnh báo kết quả cuối cùng. – jAndy
cũng đây chỉ là một ví dụ về vòng lặp for, chứ không phải là việc thực hiện đầy đủ những gì mà op muốn. anh ta có thể tìm ra phần còn lại. – m0sa
Không phải là tôi biết. Tuy nhiên, bạn có thể tự mình làm khá ngắn gọn:
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 }]
Tất nhiên, bạn không thể alert
này một trong hai, vì vậy bạn cũng có thể chỉ console.log(obj)
ở nơi đầu tiên.
Bạn thể mảng đầu ra của mảng:
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
Nhưng, một lần nữa, ew.
Vì bạn muốn alert
, tôi cho rằng nó không dành cho phiên bản sản xuất của bạn và khả năng tương thích trình duyệt cũ không phải là vấn đề.
Nếu đây là trường hợp, sau đó bạn có thể làm điều này:
var myHash = ......
alert(Object.keys(myHash).map(function(key) { return [key, myHash[key]]; }));
Điều này khá ngọt ngào. –
Ồ, đúng là: 'var myUsers = {}; ' ' myUsers [0] = {' id ':' x ',' tên người dùng ':' aaa '} \ n' 'myUsers [1 ] = {'id': 'y', 'tên người dùng': 'bbb'} ' ' Object.keys (myUsers) .map (hàm (khóa) {return myUsers [key] .username;}) ' Cảm ơn ! – dirkk0
cho nhanh & sử dụng bẩn trong alert
bạn có thể sử dụng JSON
:
alert(JSON.stringify(yourObj).replace(/,/g,'\n'));
Đây là phiên bản của tôi về nó. Nó sẽ cho phép bạn để làm phẳng đầu vào như dưới đây:
var input = {
a: 'asdf',
b: [1,2,3],
c: [[1,2],[3,4]],
d: {subA: [1,2]}
}
Chức năng là như thế này:
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);
}
Cách sử dụng cái gì đó như:
var output = []
flatten (đầu ra đầu vào);
Sau đó, đầu ra phải là mảng được làm phẳng.
Có thể hơi muộn, nhưng ở đây bạn có phiên bản câu trả lời của tôi, được cập nhật lên ES2015. Tôi sử dụng chức năng đệ quy và nó hoạt động ngay cả khi có các đối tượng khác bên trong đối tượng chính:
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] }`;
}));
}
Vì vậy, thay đổi lần cuối bạn có thể định dạng phần tử bên trong mảng.
- 1. Làm phẳng mảng đối tượng vào một mảng đối tượng khác bằng cách sử dụng javascript
- 2. Chuyển đổi mảng phẳng của đối tượng vào mảng lồng nhau của các đối tượng
- 3. Đối tượng C# thành mảng
- 4. Chuyển mảng char thành đối tượng NSString
- 5. Làm cách nào để chuyển đổi mảng C# hai chiều thành đối tượng JSON?
- 6. Tách mảng đối tượng thành mảng mới dựa trên năm của ngày của đối tượng
- 7. Mảng đối tượng đúc thành mảng chuỗi ném ClassCastException
- 8. Đúc mảng đối tượng thành mảng có thể so sánh
- 9. Chuyển đổi mảng phẳng [k1, v1, k2, v2] thành đối tượng {k1: v1, k2: v2} trong JavaScript?
- 10. Làm cách nào để chuyển đổi mảng đối tượng javascript thành mảng chuỗi thuộc tính đối tượng mà tôi muốn?
- 11. AutoMapper và làm phẳng mảng lồng nhau
- 12. mảng nhiều đối tượng
- 13. tĩnh đối tượng mảng
- 14. Mảng Javascript trở thành một cấu trúc đối tượng
- 15. LINQ: Làm thế nào để chuyển đổi đối tượng phân cấp lồng nhau để làm phẳng đối tượng
- 16. Truyền toàn bộ mảng đối tượng thành chuỗi
- 17. Chuyển đổi Zend \ Db \ ResultSet \ HydratingResultSet thành Mảng đối tượng
- 18. Đối tượng mảng JavaScript vs mảng giống như đối tượng - Làm rõ
- 19. Chuyển đổi ký hiệu chữ cho đối tượng thành mảng
- 20. Chuyển đổi đối tượng thành mảng byte trong C#
- 21. Chuyển đổi tệp phẳng sang các đối tượng Java
- 22. Làm phẳng băm thành chuỗi trong Ruby
- 23. mảng javascript đối tượng
- 24. Mảng đối tượng PHP
- 25. làm việc với mảng trong mảng đối tượng
- 26. Cách đơn giản để làm phẳng mảng này?
- 27. Cách làm phẳng (định hình lại thành 1D) một mảng thứ nguyên tùy ý trong Labview
- 28. đối tượng vào mảng chuỗi
- 29. Trong Mapouce MongoDB, làm thế nào tôi có thể làm phẳng đối tượng giá trị?
- 30. làm thế nào để "làm phẳng" biểu diễn JSon của một đối tượng hỗn hợp?
có vấn đề gì với 'console.log' hoặc' console.dir'? – jAndy
Có gì sai với bảng điều khiển.log()? Tại sao lại cảnh giác? Nó không bao giờ hiển thị đủ thông tin gỡ lỗi. Bàn điều khiển của các trình duyệt mới hơn sẽ hiển thị thông tin đầy đủ nếu bạn console.log biến của bạn. Ngoài ra, các mảng JS là các đối tượng .. hoặc nếu bạn muốn, các đối tượng là các mảng kết hợp. –
@ N.B .: JS 'Array' là 'Object'; và JS 'Object' s mô hình khái niệm về "mảng kết hợp", nhưng "mảng kết hợp" và 'Array' là khái niệm riêng biệt. Đừng nhầm lẫn chúng! Thuật ngữ của OP là tại chỗ. –