2016-07-08 2 views
4

У меня есть следующий массив:если условия заявления указаны в массиве

array = ["ProgA", "ProgC", "ProgG"] 

Этот массив может меняться в зависимости от пользовательского ввода.

У меня есть следующий JSon Файл:

{"ABC":{ 

     "ProgA": 1, 
     "ProgB": 0, 
     "ProgC": 1, 
     "ProgD": 0, 
     "ProgE": 0, 
     "ProgF": 1, 
     "ProgG": 1, 
     "ProgH": 0 


    }, 
    "DEF":{ 

     "ProgA": 1, 
     "ProgB": 0, 
     "ProgC": 0, 
     "ProgD": 0, 
     "ProgE": 1, 
     "ProgF": 0, 
     "ProgG": 1, 
     "ProgH": 0 


    }, 
    "GHI":{ 

     "ProgA": 1, 
     "ProgB": 1, 
     "ProgC": 1, 
     "ProgD": 1, 
     "ProgE": 1, 
     "ProgF": 1, 
     "ProgG": 1, 
     "ProgH": 1 


    }, 
    "JKL":{ 

     "ProgA": 1, 
     "ProgB": 0, 
     "ProgC": 1, 
     "ProgD": 1, 
     "ProgE": 0, 
     "ProgF": 1, 
     "ProgG": 0, 
     "ProgH": 1 


    }, 
    "MNO":{ 

     "ProgA": 1, 
     "ProgB": 1, 
     "ProgC": 1, 
     "ProgD": 0, 
     "ProgE": 1, 
     "ProgF": 1, 
     "ProgG": 1, 
     "ProgH": 1 

    }} 

Моя цель состоит в основном вернуть все имена ("ABC", "DEF" и т.д.), которые имеют прога, ProgC и ProgG == 1

Я не уверен, как оценивать операторы if, когда условия находятся в массиве, который может меняться.

+0

'console.log (obj.ABC [массив [1]])' будет показывать значение ' "ProgC"' 'переключатель внутри ABC' (' obj' является переменным именем он JSON объект) –

+0

Петля над объектом. Посмотрите на массив, посмотрите на значение в объекте, посмотрите, все ли значения равны единице, если true, вы добавляете его в массив – epascarello

+0

. Я не уверен, что понимаю, что вы имеете в виду, но вы получаете доступ к массиву так же, как вы когда они не могут измениться. Вот почему это массив, чтобы это разрешить. – Dellirium

ответ

10

Вы можете сделать это с помощью filter() и every()

var array = ["ProgA", "ProgC", "ProgG"]; 
 
var obj = {"ABC":{"ProgA":1,"ProgB":0,"ProgC":1,"ProgD":0,"ProgE":0,"ProgF":1,"ProgG":1,"ProgH":0},"DEF":{"ProgA":1,"ProgB":0,"ProgC":0,"ProgD":0,"ProgE":1,"ProgF":0,"ProgG":1,"ProgH":0},"GHI":{"ProgA":1,"ProgB":1,"ProgC":1,"ProgD":1,"ProgE":1,"ProgF":1,"ProgG":1,"ProgH":1},"JKL":{"ProgA":1,"ProgB":0,"ProgC":1,"ProgD":1,"ProgE":0,"ProgF":1,"ProgG":0,"ProgH":1},"MNO":{"ProgA":1,"ProgB":1,"ProgC":1,"ProgD":0,"ProgE":1,"ProgF":1,"ProgG":1,"ProgH":1}} 
 

 
var result = Object.keys(obj).filter(function(e) { 
 
    return array.every(function(a) { 
 
    return obj[e][a] == 1; 
 
    }); 
 
}); 
 

 
console.log(result)

+4

+1 к этому ответу за использование '.keys',' .filter' и '.every', это самый чистый подход, на мой взгляд. – briosheje

+0

@briosheje Спасибо :) –

+0

@NenadVracar Работал как шарм. Вы гений. – Morpheus

3

Старая школа подход: Петля над JSON объект, петля над входом массива, используйте флаг, чтобы проверить, все ли они матч или нет:

var arr = ["ProgA", "ProgC", "ProgG"] 
 
var o = {"ABC":{"ProgA":1,"ProgB":0,"ProgC":1,"ProgD":0,"ProgE":0,"ProgF":1,"ProgG":1,"ProgH":0},"DEF":{"ProgA":1,"ProgB":0,"ProgC":0,"ProgD":0,"ProgE":1,"ProgF":0,"ProgG":1,"ProgH":0},"GHI":{"ProgA":1,"ProgB":1,"ProgC":1,"ProgD":1,"ProgE":1,"ProgF":1,"ProgG":1,"ProgH":1},"JKL":{"ProgA":1,"ProgB":0,"ProgC":1,"ProgD":1,"ProgE":0,"ProgF":1,"ProgG":0,"ProgH":1},"MNO":{"ProgA":1,"ProgB":1,"ProgC":1,"ProgD":0,"ProgE":1,"ProgF":1,"ProgG":1,"ProgH":1}} 
 

 
var out = []; 
 
for(var i in o){      // loop over the object 
 
    var good = true;      // set the flag 
 
    for(var a = 0; a < arr.length; a++){ // loop over the input array 
 
    if (o[i][arr[a]] != 1) {   // check if it doesn't match 
 
     good = false;      // if so, unset the flag 
 
     break;       // and break the inner loop 
 
    } 
 
    } 
 
    if (good) out.push(i);  // if the flag is set, we have a match 
 
} 
 

 
console.log(out);

+0

старую школу здесь тоже :) https://jsfiddle.net/codeandcloud/n38d009n/ – naveen

+1

@naveen, haha, same! :) – Shomz

-1
var mainobj = {"ABC":{ 

    "ProgA": 1, 
    "ProgB": 0, 
    "ProgC": 1, 
    "ProgD": 0, 
    "ProgE": 0, 
    "ProgF": 1, 
    "ProgG": 1, 
    "ProgH": 0 


}, 
"DEF":{ 

    "ProgA": 1, 
    "ProgB": 0, 
    "ProgC": 0, 
    "ProgD": 0, 
    "ProgE": 1, 
    "ProgF": 0, 
    "ProgG": 1, 
    "ProgH": 0 


}, 
"GHI":{ 

    "ProgA": 1, 
    "ProgB": 1, 
    "ProgC": 1, 
    "ProgD": 1, 
    "ProgE": 1, 
    "ProgF": 1, 
    "ProgG": 1, 
    "ProgH": 1 


}, 
"JKL":{ 

    "ProgA": 1, 
    "ProgB": 0, 
    "ProgC": 1, 
    "ProgD": 1, 
    "ProgE": 0, 
    "ProgF": 1, 
    "ProgG": 0, 
    "ProgH": 1 


}, 
"MNO":{ 

    "ProgA": 1, 
    "ProgB": 1, 
    "ProgC": 1, 
    "ProgD": 0, 
    "ProgE": 1, 
    "ProgF": 1, 
    "ProgG": 1, 
    "ProgH": 1 

}} 

var result = []; 

for(var obj in mainobj){ 
    console.log(mainobj[obj]['ProgA']) 
    if(mainobj[obj]['ProgA'] && mainobj[obj]['ProgC'] && mainobj[obj]['ProgG']){ 
    result.push(obj); 
} 
} 

console.log(result); 
console.log(result); 
+0

Это будет терпеть неудачу y после изменения ввода ... – Shomz

Смежные вопросы