2016-07-01 4 views
1

다음은 처음 코드입니다.자바 스크립트 다차원 배열에서 둘 이상의 인덱스 결과를 반환하는 방법?

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()

내가 모두 "누가"& "경우"를 제외하는 동안 "어떻게"에 대한 결과를 반환 할 수 있도록하고 싶습니다

Plunk

.

따라서 최종 결과는 [50, 33]입니다.

무한한 양의 항목으로 작업 할 수있는 방법을 사용하고 싶습니다. 예를 들어 "questions"배열에 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

의 가능한 복제 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);

[액세스/처리 (중첩) 객체, 배열 또는 JSON (
+0

안녕 니나, 답변 주셔서 감사합니다! 나는 첫 번째 해결 방법을 가지고 놀았으며 이런 식으로 객체로 변환하는 것이 쉬운 지 궁금해하십니까? 그렇게. result.push ({ 질문 : 질문, 값 : rr [data.cities.indexOf (c)]}); }}). 두 번째 솔루션을 지금부터 살펴 보겠습니다. 시간을내어 도와 주셔서 감사합니다. – since095

+0

첫 번째 제안을 받으시겠습니까? –

+0

안녕하세요. 니나, 괜찮 으면 다른 질문이 있습니까? 두 결과를 반환 할 수 있는지 궁금해하고 그에 따라 객체를 편집 하시겠습니까? 예 : resultTest.push ({do stuff})'return {result, resultTest}; 그리고'var i = getData();'와'result.push (do stuff)''-'console.log (i. 결과 ([ "누가", "어디서"], "빌", "볼티모어")) 등. [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] 
} 
관련 문제