私はオブジェクトをハッシュテーブルとして使用しています。私はすぐに内容を印刷したいと思います(たとえばalert()
)。ハッシュを(キー、値)のペアの配列に変換するためのものはありますか?オブジェクトを配列に展開しますか?
答えて
。それは__proto__
のような余分なものを除外するので、これはconsole.logよりも解析するのがずっと簡単です。
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
}
}
私がこれを改善するために行う唯一のことは、再帰レベルに基づいて正しくインデントされていることです。 alert
で迅速な&汚い用の
なぜあなたは 'console.log'よりもこれを選択しますか?なぜあなたのブラウザが提供する素晴らしいデバッグオプションを避けていますか? –
誰かが 'console.log'を避けていると誰が言ったのですか?問題は、データをフラット化する方法でした。 'alert()'は "例えば"としか言いませんでした。 Ajax経由でサーバーに戻してログに記録する場合はどうなりますか? –
私は 'console.log'を知っていて、私のデバッグニーズの大半は確かに素晴らしいです。しかし時には何かが起こった時を正確に知るためにアラートを使用することが役立つことがあります。アラートの直後にあるコードは、アラートをOKにするまで実行されません。一般に、この動作が望ましくないときは、 '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]]; }));
これはかなり甘いです。 –
ああ、はい、それは次のとおり 'のvar myUsers = {};' 'myUsers [0] = { 'ID': 'X'、 'ユーザ名': 'AAA'} \ N ' ' myUsers [1 ] = { 'ID': 'Y'、 'ユーザ名': 'BBB'} '' Object.keys(myUsers).MAP(関数(キー){リターンmyUsers [キー] .username;}) ' おかげ! – dirkk0
あなたは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]}
}
機能は、このようなものです:
VAR出力= []
フラット化(:
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. Apache Pigで配列を展開する
- 2. X509構造体からSSL配列をchar配列に展開する
- 3. variadicパラメータパックでベクトルまたは配列を展開するには?
- 4. 配列を値の文字列に展開する方法は?
- 5. 反射を使用して配列を展開する
- 6. オブジェクト[]配列をjavaのint []配列に変換しますか?
- 7. オブジェクト配列をJPAエンティティ配列にキャストしますか?
- 8. 引数として配列を展開する
- 9. 構造体の配列を動的に展開する
- 10. オブジェクトの配列が空の配列を返しますか?
- 11. 列を行に展開しようとしています
- 12. オブジェクトの配列を配列に変換します。
- 13. MVC3 /.net4にJSONified Javascript配列をC#の文字列に展開する方法がありますか?
- 14. AHK文字列の変数を展開していますか?
- 15. foreachループで多次元配列を展開する
- 16. 文字列展開
- 17. Perl - 文字列をリストに展開します。
- 18. 'メモリストリームは展開できません'が、配列のサイズは同じですか?
- 19. インストーラでapp.configを展開しますか?
- 20. wpf - アニメーションを展開しますか?
- 21. XBAPアプリケーションを展開しますか?
- 22. バイト配列をBinaryReaderを介して文字列に展開すると、空の文字列が返される
- 23. Rubyのオブジェクトの配列からオブジェクト属性を返します
- 24. Powershellのオブジェクトの配列にオブジェクトを追加します
- 25. Clojureは「展開」していますか?
- 26. オブジェクトを静的オブジェクトに展開して、再び戻します。 2つのドメインにまたがって
- 27. Postgres Plusで開発し、PostgreSQLオープンソースを展開しますか?
- 28. session_start()と$ _SESSION配列を使用し、配列内のオブジェクトにログインします
- 29. オブジェクトをグローバル配列に挿入しますか?
- 30. Mysql動的テーブル展開列
'console.log'または' console.dir'には何が間違っていますか? – jAndy
コンソールで何が問題ですか。ログ()?なぜ警告するのですか?それは十分なデバッグ情報を表示しません。変数をconsole.logにすると、新しいブラウザのコンソールに十分な情報が表示されるはずです。また、JS配列はオブジェクトです。もしそうなら、オブジェクトは連想配列です。 –
@ N.B .: JS 'Array'sは' Object'sです。 JS 'Object'は「連想配列」の概念をモデル化していますが、「連想配列」と「配列」は異なる概念です。それらを混乱させてはいけません! OPの専門用語が載っています。 –