私が達成しようとしているものにタイトルが適切かどうかわからない
JSONの結果を配列にマッピングしています。これを繰り返し行う必要があるため、コードを1つの関数に入れたいと思います。
次の例では、繰り返します。私はitem.data1、item.data2と呼ばれるプロパティがあり、2番目の例ではitem.something1、item.something2 ...それらのプロパティを「一般的な」引数として新しく作成された関数に渡し、そこで使用する方法はありませんそれらのマップを返すために自分自身を繰り返しますか?新しい関数は、以下の2つの例と、プロパティに異なる名前を付けることができる他の場合に使用できる必要があります。
service.getData(function(data) {
var map = {};
map = $.map(data, function(item, i) {
var entry = {};
entry.key = item.data1;
entry.value = item.data2;
return entry;
});
});
service.getSomething(function(data) {
var map = {};
map = $.map(data, function(item, i) {
var entry = {};
entry.key = item.something1;
entry.value = item.something2;
return entry;
});
});
使用する []
オブジェクトからプロパティを動的に引き出す文字列。
var a = { foo: 123 };
a.foo // 123
a['foo'] // 123
var str = 'foo';
a[str] // 123
これは、メソッドをそのようにリファクタリングできることを意味し、文字列として読み取るプロパティの名前を渡すだけです。
var getKeyValueMap = function(data, keyPropName, valuePropName) {
return $.map(data, function(item, i) {
return {
key: item[keyPropName],
value: item[valuePropName]
}
});
};
service.getData(function(data) {
return getKeyValueMap(data, 'data1', 'data2');
});
service.getSomething(function(data) {
return getKeyValueMap(data, 'something1', 'something2');
});
これは、 このフィドルiveであなただけのために作成された:D のような[]
-表記の代わりに.
演算子を使用して実行できます。
var data = [{
data1: 'foo',
data2: 'bar',
something1: 'sparky',
something2: 'arf arf!'},
{
data1: 'My name is',
data2: 'What?',
something1: 'my name is',
something2: 'Who?!'}
];
function test(data, prop) {
var d_length = data.length;
for (var i = 0; i < d_length; i++) {
alert(data[i][prop]);
}
}
test(data, 'data1');
item
オブジェクトと項目キーのマップをエントリキーに渡す必要があります。これは、2つの配列、タプルなどの配列、またはオブジェクトのいずれかです。私が考えることができる最も簡単な方法は、記述子オブジェクトをエントリ自体に変更することです:
function mapPropertyNames(source, dest) {
for (var prop in dest)
dest[prop] = source[dest[prop]];
return dest;
}
// and use it like this:
var map = $.map(data, function(item, i) {
return mapPropertyNames(item, {key:"something1", value:"something2"});
});
何かのようなもの
service.getData(function(data) {
var map = {};
var varNamePrefix = 'data';
map = $.map(data, function(item, i) {
return getProperties(item, varNamePrefix);
});
});
service.getSomething(function(data) {
var map = {};
var varNamePrefix = 'something';
map = $.map(data, function(item, i) {
return getProperties(item, varNamePrefix);
});
});
function getProperties(item, varNamePrefix) {
var ret = {};
ret.key = item[varNamePrefix + '1'];
ret.value = item[varNamePrefix + '2'];
return ret;
}
助けてもらえますか?
基本的に、プロパティプレフィックスを取得し、それを使用してアイテムから取得する実際のプロパティ名を形成する関数を使用できます。