2016-07-01 5 views
1

ここから始まるコードです。javascriptの多次元配列内に複数のインデックスの結果を返す方法は?

Plunk

data = { 
 
    "questions": ["Who", "Where", "How"], 
 
    "names": ["Bill", "Fred", "Lindsey"], 
 
    "cities": ["Baltimore", "New York", "Chicago"], 
 

 
    "values": [ 
 
    [ 
 
     [50, 20, 40], 
 
     [40, 90, 10], 
 
     [50, 75, 30] 
 

 
    ], 
 
    [ 
 
     [33, 57, 100], 
 
     [20, 70, 89], 
 
     [16, 40, 68] 
 
    ], 
 
    [ 
 
     [3, 26, 54], 
 
     [62, 69, 86], 
 
     [23, 81, 98] 
 
    ] 
 
    ] 
 
} 
 

 
function sortObject() { 
 
    var values; 
 

 
    var question = data.questions.indexOf("Who", "Where") 
 
    var name = data.names.indexOf("Bill"); 
 
    var city = data.cities.indexOf("Baltimore"); 
 

 
    values = data.values[question][name][city] 
 
    console.log(values) 
 
} 
 

 
sortObject()

私は両方の "誰" & "" "どのように" を除くながらの結果を返すことができるようにしたいと思います。

したがって、最終結果は[50,33]になります。

無限の量のアイテムで作業できるようにしたいと思います。たとえば、「質問」配列に100個のアイテムが存在する可能性があります。そして、私が望むものを個別に選択することができます配列内の位置に関係なく表示されます。

私は各項目をループしてから、おそらく行に沿って何かをしなければならないと思います。

for (var question = 0; question < data.questions.length; question++) { 
    if (data.questions.indexOf() == "Who" || "Where") { 
     var name = data.names.indexOf("Bill"); 
     var city = data.cities.indexOf("Baltimore"); 
     values = data.values[question][name][city] 
     console.log(values) 
    } 
    } 

しかし、これは動作しないので、ここからどこに行くのかは分かりません。

ご希望の情報があれば教えてください。

ご協力いただきありがとうございます。

+0

[アクセス/プロセス(ネストされた)オブジェクト、アレイまたはJSON]の可能な重複(http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays - または - json) – Teemu

答えて

2

を検索するための複数の項目がある場合は、反復処理ができます。

function getData(question, name, city) { 
 
    var result = []; 
 

 
    (Array.isArray(question) ? question : [question]).forEach(function (q) { 
 
     var r = data.values[data.questions.indexOf(q)] || []; 
 
     (Array.isArray(name) ? name : [name]).forEach(function (n) { 
 
      var rr = r[data.names.indexOf(n)] || []; 
 
      (Array.isArray(city) ? city : [city]).forEach(function (c) { 
 
       result.push({ 
 
        question: [q, n, c], 
 
        value: rr[data.cities.indexOf(c)] 
 
       }); 
 
      }); 
 
     }); 
 
    }); 
 
    return result; 
 
} 
 

 
var data = { "questions": ["Who", "Where", "How"], "names": ["Bill", "Fred", "Lindsey"], "cities": ["Baltimore", "New York", "Chicago"], "values": [[[50, 20, 40], [40, 90, 10], [50, 75, 30]], [[33, 57, 100], [20, 70, 89], [16, 40, 68]], [[3, 26, 54], [62, 69, 86], [23, 81, 98]]] }, 
 
    result = getData(["Who", "Where"], "Bill", "Baltimore"); 
 

 
console.log(result);

別のよりダイナミックな解決策は、検索対象と反復再帰的なアプローチであり得ます。

function getData(search) { 
 
    var result = [], 
 
     order = ['questions', 'names', 'cities']; 
 

 
    function iter(value, level) { 
 
     if (level === order.length) { 
 
      return result.push(value); 
 
     } 
 
     search[order[level]].forEach(function (a) { 
 
      iter((value || [])[data[order[level]].indexOf(a)], level + 1); 
 
     }); 
 
    } 
 

 
    iter(data.values, 0); 
 
    return result; 
 
} 
 

 
var data = { "questions": ["Who", "Where", "How"], "names": ["Bill", "Fred", "Lindsey"], "cities": ["Baltimore", "New York", "Chicago"], "values": [[[50, 20, 40], [40, 90, 10], [50, 75, 30]], [[33, 57, 100], [20, 70, 89], [16, 40, 68]], [[3, 26, 54], [62, 69, 86], [23, 81, 98]]] }, 
 
    result = getData({ questions: ["Who", "Where"], names: ["Bill"], cities: ["Baltimore"] }); 
 

 
console.log(result);

+0

こんにちはニーナ、答えをありがとう!私は最初の解決策で遊んできましたが、このようにオブジェクトに変換するのが簡単かどうか疑問に思っていましたか?そのようです; result.push({ 質問:質問、 値:rr [data.cities.indexOf(c)]}); }})。私は今も第二の解決策を見ていきます。時間をとってくれてありがとう! – since095

+0

今すぐ最初の提案が好きですか? –

+0

こんにちはニーナ、それは大丈夫なら別の質問がありますか?私はそれが2つの結果を返すことが可能かどうか、それに応じてオブジェクトを編集することができますか?例えば; 'return {result、resultTest};' 'var i = getData()'; '' console.log(i。)のように '' resultTest.push({do stuff}) '' 'result.push(do stuff)結果(["Who"、 "Where"]、 "Bill"、 "Baltimore"));などなど[plnk](http://plnkr.co/edit/lzSOTIjykPRRX0WBmsQX?p=preview)。これが別の質問として役立つのが良いかどうか、あるいはコメントで尋ねるだけでいいのかどうか分かりません。 – since095

0

は、このようなあなたのコードを変更してください:

function sortObject() { 
    var values = []; 

    var whoIndex = data.questions.indexOf("Who"); 
    var whereIndex = data.questions.indexOf("Where"); 
    var name = data.names.indexOf("Bill"); 
    var city = data.cities.indexOf("Baltimore"); 

    values.push(data.values[whoIndex][name][city]); 
    values.push(data.values[whereIndex][name][city]); 
    console.log(values); //[50, 33] 
} 
関連する問題