2017-07-20 92 views
1

我將不勝感激任何幫助。如何比較多維數組中的每個元素?

這已被編輯以更清楚地描述如何評估數組。

我想弄清楚如何比較多維數組的所有元素來確定元素是否包含一個真集。

標準

  1. 我不知道數組有多大要提前的時間(可能是2,可能是1000)。
  2. 每個數組元素都有兩個需要比較的特徵(顏色和類型)。
  3. 如果任何兩個元素共享任何特徵值,則所有元素必須共享該特徵值。
  4. 'color'&'type'的值可以比較爲直接文本,它們會匹配或不匹配,不會有任何變化。即綠色!=格林。
  5. 該函數只需根據是否爲真集來返回true或false。
  6. 任何協助都可以在JavaScript,PHP或C中給出。我可以外推。

陣列實施例

var obj = { 
    'Element001' : { 
     'ID' : 'value', 
     'Color' : 'value', 
     'Type' : 'value' 
    }, 
    'Element002' : { 
     'ID' : 'value', 
     'Color' : 'value', 
     'Type' : 'value' 
    } 
    ... 
}; 

的不同陣列將如何評價實施例。

以下數組應該計算爲「TRUE」,因爲所有元素都是紅色的,並且沒有元素共享一個類型。

var obj = { 
    'Element001' : { 'ID' : '1', 'Color' : 'red', 'Type' : 'b' }, 
    'Element002' : { 'ID' : '2', 'Color' : 'red', 'Type' : 'a' } 
    'Element003' : { 'ID' : '21', 'Color' : 'red', 'Type' : 'c' } 
}; 

以下陣列應評估爲「真」,因爲所有的元素是「b」型,而沒有單元共享一個顏色。

var obj = { 
    'Element001' : { 'ID' : '1', 'Color' : 'red', 'Type' : 'b' }, 
    'Element002' : { 'ID' : '2', 'Color' : 'blue', 'Type' : 'b' } 
    'Element003' : { 'ID' : '21', 'Color' : 'green', 'Type' : 'b' } 
}; 

以下陣列應評估爲「真」,因爲所有的元素都是「藍色」和所有的元素都是「C」型的。

var obj = { 
    'Element001' : { 'ID' : '1', 'Color' : 'blue', 'Type' : 'c' }, 
    'Element002' : { 'ID' : '2', 'Color' : 'blue', 'Type' : 'c' } 
    'Element003' : { 'ID' : '21', 'Color' : 'blue', 'Type' : 'c' } 
}; 

下面的數組應該計算爲「FALSE」,因爲兩個元素共享一個顏色「紅色」。按規則:如果任何兩個元素共享一個特徵,他們必須全部共享它。因此所有元素都必須是紅色的。在這個例子中也沒有元素共享一個類型。但即使它們都是「a」類型,由於color屬性,它仍然會評估爲「FALSE」。

var obj = { 
    'Element001' : { 'ID' : '1', 'Color' : 'red', 'Type' : 'b' }, 
    'Element002' : { 'ID' : '2', 'Color' : 'red', 'Type' : 'a' }, 
    'Element003' : { 'ID' : '21', 'Color' : 'blue', 'Type' : 'c' } 
}; 

此外,另一個評估爲「FALSE」的是未共享特徵的集合。
像這樣的一個......

var obj = { 
    'Element001' : { 'ID' : '1', 'Color' : 'red', 'Type' : 'b' }, 
    'Element002' : { 'ID' : '2', 'Color' : 'green', 'Type' : 'a' }, 
    'Element003' : { 'ID' : '21', 'Color' : 'blue', 'Type' : 'c' } 
}; 
+0

爲什麼不JSON.stringify(OBJ1)=== JSON.stringify(OBJ2)? – CIsForCookies

+0

可能要考慮將您的標題重命名爲包含嵌套json而不是多維數組。 – atomSmasher

+1

@CIsForCookies因爲他只想比較'Color'和'Type'。不是整個對象。 – icecub

回答

1

請遵循實例

var obj = { 
 
    'Element001' : { 
 
     'ID' : '1', 
 
     'Color' : 'Red', 
 
     'Type' : 'X' 
 
    }, 
 
    'Element002' : { 
 
     'ID' : '2', 
 
     'Color' : 'Green', 
 
     'Type' : 'X' 
 
    } 
 
}; 
 

 
for(var x in obj){ 
 
    if(obj[x].Color=="Green") 
 
    { 
 
     console.log("ID : " +obj[x].ID+" has color Green"); 
 
    } 
 
}

如果你不想這樣,那麼你可以使用此代碼

var obj = { 
 
    'Element001' : { 'ID' : '1', 'Color' : 'red', 'Type' : 'b' }, 
 
    'Element002' : { 'ID' : '2', 'Color' : 'red', 'Type' : 'a' }, 
 
    'Element003' : { 'ID' : '21', 'Color' : 'red', 'Type' : 'c' } 
 
}; 
 

 
var Keys=Object.keys(obj); 
 
var _color=obj[Keys[0]].Color; 
 
var _type=obj[Keys[0]].Type; 
 
var _isSameColor=true; 
 
var _isSameType=true; 
 
for(var x=1;x<Keys.length;x++){ 
 
    _isSameColor=_isSameColor&_color==obj[Keys[x]].Color; 
 
    _isSameType=_isSameType&_type==obj[Keys[x]].Type; 
 
} 
 
console.log(_isSameColor); 
 
console.log(_isSameType); 
 
if(_isSameColor||_isSameType){ 
 
    alert("True"); 
 
} 
 
else{ 
 
    alert("False"); 
 
}

+0

請解釋更多,所以我可以給出這樣的答案我沒有得到你想要的東西 –

+0

我沒有測試具體的價值。我不會知道價值觀可能是什麼。我已經添加了例子。感謝您的時間。 – mpactMEDIA

+0

嘗試第二個例子它會像你想要的那樣有用 –

0

你應該用方括號符號:[]

var obj = [ 
 
     'Element_1' : { 
 
      'ID' : '1', 
 
      'Color' : 'Red', 
 
      'Type' : 'X' 
 
     }, 
 
     'Element_2' : { 
 
      'ID' : '2', 
 
      'Color' : 'Green', 
 
      'Type' : 'X' 
 
     } 
 
    ]; 
 

 
    for(var i = 0 ; i++ ; i < obj.length){ 
 
    if(obj[i].Color=="Green") { 
 
    console.log("ID : " +obj[i].ID+" has color Green"); 
 
    } 
 
    }