CoffeeScriptで匿名オブジェクトの配列を定義するにはどうすればよいですか? YAML構文を使用して、これはまったく可能ですか?
名前付きオブジェクトの配列を持つことは非常に簡単であることを知っています:
items:[
item1:
name1:value1
item2:
name:value2
]
ただし、これら2つのオブジェクトに名前がなかった場合は、少し注意が必要です。
できません:
これはいくつかのトリックです:
items:[
(name:"value1")
(name:"value2")
]
別の
items:[
true && name:"value1"
true && name:"value2"
]
これが一番だ:
items:[
{name:"value1"}
{name:"value2"}
]
シンプル-オブジェクトを定義する列よりも低い列に単独でコンマを配置します。
a = [
nameA1: valueA1
nameA2: valueA2
nameA3: valueA3
,
nameB1: valueB1
nameB2: valueB2
nameB3: valueB3
]
となります:
var a;
a = [
{
nameA1: valueA1,
nameA2: valueA2,
nameA3: valueA3
}, {
nameB1: valueB1,
nameB2: valueB2,
nameB3: valueB3
}
];
各オブジェクト間にカンマを追加することもできます。
items:[
item1:
name1:value1
,
item2:
name:value2
]
コンマソリューションの方が優れていると思いますが、完全を期すためにこれを追加すると考えました。
a = [
{
nameA1: valueA1
nameA2: valueA2
nameA3: valueA3
}
{
nameB1: valueB1
nameB2: valueB2
nameB3: valueB3
}
]
配列の定義中に変数を定義できるため、,い答えは次のようになります。
_a =
items: [
item1 =
name: 'value1'
item2 =
name: 'value2'
]
_
動作しますが、「定義されているが使用されていない変数(item1、item2)」に関する警告が表示される場合があります。より良い方法は、使用されていない変数を省略するために使用されるアンダースコアを使用することです:
_a =
items: [
_ =
name: 'value1'
_ =
name: 'value2'
]
_
console.log JSON.stringify(a)
はこれを生成します:
_ {
"items":[
{
"name":"value1"
},{
"name":"value2"
}
]
}
_
OPの質問に対する答えではありませんが、私が同じ理由でここにいる場合に備えて... Mountain Dewが少なく、「:」の代わりに「=」を使用すると、Coffeescriptは配列を変更しますコンパイルエラーなしのオブジェクトのフラット配列への変換:
data = [
one='one'
two='two'
,
one='1'
two='2'
]
生産する
['one', 'two', '1', '2']
さらにMountain Dewを挿入し、「=」を「:」に置き換えます。
少しいじってから、これを適切にコンパイルできると報告してうれしいです:
items: [
nameA: subA
nameB: subB
,
nameX: subX
nameY: subY
]
その結果、期待どおりの結果が得られます。つまり、2つの匿名オブジェクトのリストです。
関連する問題に遭遇し、この解決策を見つけました。中括弧のない多数の単一のk/vオブジェクトの配列が必要な場合は、それらの一部をインデントしてください。トリックをするようです。
data = [
"2013-09-25T16:46:52.636Z":3,
"2013-09-25T16:47:52.636Z":6,
"2013-09-25T16:48:52.636Z":2,
"2013-09-25T16:49:52.636Z":7,
"2013-09-25T16:50:52.636Z":5,
"2013-09-25T16:51:52.636Z":2,
"2013-09-25T16:52:52.636Z":1,
"2013-09-25T16:53:52.636Z":3,
"2013-09-25T16:54:52.636Z":8,
"2013-09-25T16:55:52.636Z":9,
"2013-09-25T16:56:52.636Z":2,
"2013-09-25T16:57:52.636Z":5,
"2013-09-25T16:58:52.636Z":7
]
生産物:
coffee> data
[ { '2013-09-25T16:46:52.636Z': 3 },
{ '2013-09-25T16:47:52.636Z': 6 },
{ '2013-09-25T16:48:52.636Z': 2 },
{ '2013-09-25T16:49:52.636Z': 7 },
{ '2013-09-25T16:50:52.636Z': 5 },
{ '2013-09-25T16:51:52.636Z': 2 },
{ '2013-09-25T16:52:52.636Z': 1 },
{ '2013-09-25T16:53:52.636Z': 3 },
{ '2013-09-25T16:54:52.636Z': 8 },
{ '2013-09-25T16:55:52.636Z': 9 },
{ '2013-09-25T16:56:52.636Z': 2 },
{ '2013-09-25T16:57:52.636Z': 5 },
{ '2013-09-25T16:58:52.636Z': 7 } ]
私には直観に反しています。これでサブオブジェクトが作成されると思いますが、行の最後のコンマは、そのオブジェクトのプロパティの作成を停止するように指示していると思います。
何故なの:
list = []
list.Push
prop1: val
prop2: val
list.Push
prop1: val
prop2: val
私にとってjsに対する大きな改善点であり、非常に読みやすく、最小限で安全に書くことができます。