2016-09-11 4 views
2

フィールド名を引数としてとり、JSONのビットから対応する値の配列を返す関数を記述しようとしています。JSONクエリで変数を使用する

例オブジェクト:

var myObject = [ 
    {"x": 10, "y": 10}, 
    {"x": 20, "y": 10}, 
    {"x": 20, "y": 20}, 
    {"x": 10, "y": 20} 
]; 

My機能は、次のようなものになります。理想的には

function getValues(desiredValue) { 
    var values = []; 
    for (i = 0; i < myObject.length; i++) { 
     values[i] = myObject[i].desiredValue; 
    } 
    return values; 
} 
getValues(x); 

を、私はと呼ばれるフィールド名を探して、代わりのgetValuesに渡される引数xを持っているでしょうdesiredValuexというフィールド名を探します。

返される配列は次のようになります。このコードの問題は明らかなように

[10,20,20,10] 

、どのように私は、所望の結果を得ることができますか?

また、私は不要な依存関係を回避しようとしています。絶対に必要でない限り、私にJQueryを与えないでください。

答えて

1

map()を使用して目的の結果を返すことができます。

var myObject = [ 
 
    {"x": 10, "y": 10}, 
 
    {"x": 20, "y": 10}, 
 
    {"x": 20, "y": 20}, 
 
    {"x": 10, "y": 20} 
 
]; 
 

 
function getValues(desiredValue) { 
 
    return myObject.map(e => e[desiredValue]); 
 
} 
 

 
console.log(getValues('x'))

+0

重要な部分は '[desiredValue]'です。 OPが彼らと同じ方法で既に '[i]'を使っていたことに気づいていないように思えるのはちょっと残念です... –

0

あなたが実際にJSON.parse()を使って、与えられたJSON文字列(ここで与えられていない配列)を解析する必要があります。参照してください:それは簡単に他の機能と構成することができるので、http://jsbin.com/kevoqe/edit?js,console

0

簡単なユーティリティ

//also accepts a path like "foo.bar.baz" 
//returns undefined if path can't be resolved 
function fetch(path){ 
    var keys = path.split("."); 
    return function(target){ 
     for(var t = target, i = 0; i < keys.length; t = t[ keys[ i++ ] ]) 
      if(t == null) return void 0; 
     return t; 
    } 
} 

、それは、このバージョンの使用

var myObject = [ 
    {"x": 10, "y": 10}, 
    {"x": 20, "y": 10}, 
    {"x": 20, "y": 20}, 
    {"x": 10, "y": 20} 
]; 

var result = myObject.map(fetch("y")); 

だが、もう少し柔軟Array.map()とハードワイヤード1を超えています。

特に、この特定のケースでは、これはすでに過小です。ここにあなたは簡単に書くことができます:

var result = myObject.map(pt => pt.y); 

あなたはどんな短くて簡単でも得ることができません。オブジェクトの配列で操作を行うには

var dynamicPropertyName = "y"; 
//... 
var result = myObject.map(pt => pt[ dynamicPropertyName ]); 
0

使用array map方法:何らかの理由で財産が本当にダイナミックされている場合には、あなたはそれを含むいくつかの変数を持っています。

は、このコードを試してみてください:

var myObject = [ 
    {"x": 10, "y": 10}, 
    {"x": 20, "y": 10}, 
    {"x": 20, "y": 20}, 
    {"x": 10, "y": 20} 
]; 

var output = getValues("x"); 
console.log(output); 

function getValues(desiredValue) { 
    return myObject.map(function(item) { 
     return item[desiredValue]; 
    }); 
} 

出力:フィドル作業

enter image description here

https://jsfiddle.net/ffyjyzjb/

関連する問題