我正在使用一个对象作为哈希表。我想快速打印出它的内容(例如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. 压扁数组在对象中
- 2. 如何使用Jolt来压扁n个对象的json数组?
- 3. Python压扁数组内部numpy数组
- 4. 用Gorm压扁对象模型?
- 5. With Underscore,我如何递归地压扁一组对象?
- 6. 压扁和重组提交
- 7. 压扁
- 8. 对象映射 - 压扁属性,而不是对象引用
- 9. 试图压扁数组在numpy
- 10. 压扁多维数组递归php
- 11. PHP递归收集SimpleXMLElement数据并压扁数组数组
- 12. 压扁RDD
- 13. XSLT压扁XML
- 14. 压扁OCaml中
- 15. 使用SQL压扁数据
- 16. AutoMapper:如何压扁
- 17. 引导柱压扁
- 18. 取消压扁表
- 19. UIImageView“压扁”后CGAffineTransformMakeRotation
- 20. 压扁在PowerShell中
- 21. 可空兄弟压扁对象和表妹对象,而不是收藏
- 22. 如何合并对象被压扁使用Stream.flatmap
- 23. 'int'对象不是可下载的(试图压扁列表)?
- 24. 访问JSONP的响应文本。压扁多个对象文本
- 25. 可绘制在视图得到压扁
- 26. 将1行表压扁到键值对表中
- 27. R数据帧压扁/重塑
- 28. Firebase数据过多压扁了多少?
- 29. 如何压扁结构数组的列(由Spark ML API返回)?
- 30. 简单的方法来压扁这个数组?
'console.log'或'console.dir'有什么问题? – jAndy
控制台有什么问题。日志()?为什么要提醒它从不显示足够的调试信息。新的浏览器控制台应显示足够的信息,如果你console.log你的变量。此外,JS数组是对象..或者如果你愿意,对象是关联数组。 –
@ N.B. .: JS'Array's是'Object's;和JS'Object'模拟“关联数组”的概念,但“关联数组”和“数组”是不同的概念。我们不要混淆它们! OP的术语是现货。 –