2017-11-02 10 views
0

私は次のようなオブジェクト(このオブジェクトは、4キー/値のペアを有しているが、私の実際のオブジェクトは、それらの任意の番号を持つことができます)で働いている:私はキーを追加しようとしているオブジェクトの最初と最後のプロパティを取得するには?

var myObj = { 
    action: 'open', 
    card: 'Comment card name', 
    id: '54AEF364', 
    url: 'www.myurl.com' 
}; 

var myString = 'action:open|card:Comment card name|id:54AEF364|url:www.myurl.com' 

私は...ループ内を使用してこれを実行しようとしています:

for (var i in myObj) { 
    var myString += i + ':' + myObj[i] + '|'; 
} 

|:とで区切られた単一の文字列に変換する値「」のように、と「」私はmを得ることができる2の例外を除いて、私は必要なもののOST、:

  1. 「未定義」は最後のキー/値ペアの最初のプロパティ名
  2. 前に発生し、あってはなりません「|」最終的な値の後に、これは文字列の最後であるため、

どのようにすればよいですか?マップや配列を使用して

+0

重要な順序ですか? – MinusFour

+0

myStringから最後の文字を削除します。 [こちらをご覧ください](https://stackoverflow.com/questions/952924/javascript-chop-slice-trim-off-last-character-in-string) – Eugene

+2

注文が重要な場合、プロパティキーの順序は技術的に指定されていない(すなわち、いかなる順序でも保証されていない)。 しかし、ほとんどのブラウザでは、Numbersとして解析されるキーを除いて、キーの順序は保持されます。 –

答えて

4

参加:

const myObj = { 
    action: 'open', 
    card: 'Comment card name', 
    id: '54AEF364', 
    url: 'www.myurl.com' 
}; 

const myObjSerialized = Object.keys(myObj).map(key => `${key}:${myObj[key]}`).join('|'); 
console.log(myObjSerialized); 
+0

地図をもう少し理解しようとしています。 myObj [key]がnullまたは未定義の場合は、エラーになるでしょうか? – Ammar

+2

こんにちはアママーマップは、配列の上で反復するだけで、オブジェクトは常にキーを持っています。もしいくつかのキーがnull値を持っていれば、私が入れたコードは文字列に変換されます(javascriptテンプレートのため)。値がnullか未定義かどうかを知る必要がある場合は、最初にフィルタをかけてからmapを使用できます。 –

+0

私はちょうどそれをテストし、あなたは正しいです。私はそれが@ asw1984が考慮する必要があるケースだと思う。ありがとう。 – Ammar

0

あなたは、常に信頼できる老い標準forループのために行くと、オブジェクトのキーを反復処理することができます。

var myObj = { 
 
    action: 'open', 
 
    card: 'Comment card name', 
 
    id: '54AEF364', 
 
    url: 'www.myurl.com' 
 
}; 
 

 
var serialize = function(data){ 
 
    var keys = Object.keys(data), string = ""; 
 
    for(var k=0; k<keys.length; ++k){ 
 
    if(k > 0) string += '|'; 
 
    string += keys[k]+':'+data[keys[k]]; 
 
    } 
 
    return string; 
 
} 
 

 
console.log(serialize(myObj));

0

未定義の変数myStringに関連しています。 「|」次に、あなたが最後を削除することができ

var myObj = { 
 
    action: 'open', 
 
    card: 'Comment card name', 
 
    id: '54AEF364', 
 
    url: 'www.myurl.com' 
 
}; 
 
var myString = ""; 
 
for (var i in myObj) { 
 
    myString += i + ':' + myObj[i] + '|'; 
 
} 
 
console.log(myString);

:あなたはループ のためにそれを使用する前に、変数を宣言する必要がありますそのように :

if (myString.length > 0) { 
    myString = myString.substring(0, myString.length - 1); 
} 

しかし、よりエレガントな方法があります。文字列を配列に置き換えて、ループの最後に項目を結合します。 :

関連する問題