Сравнение двух объектов
Доброго времени суток! Глупый вопрос, но все же интересно, как сделать что alert("Неверно"); не выводился столько раз сколько элементов в объекте? Не понимаю от чего так происходит. Подскажите пожалуйста как исправить данную ошибку?
function test () {
var secret = {
secret1 : "1+1",
secret2 : "2+2",
secret3 : "3+3"
};
var answer = {
answer1 : 2,
answer2 : 4,
answer3 : 6
};
var otvet, countYes = 0, countNo = 3;
for (var keyS in secret) {
otvet = prompt(secret[keyS]);
for(var keyA in answer) {
if (otvet == answer[keyA]) {
alert("Верно");
countYes++;
countNo--;
} else alert("Неверно");
}
}
alert("Верных ответов: " + countYes);
alert("Неверных ответов: " + countNo);
}
test();
|
Цитата:
function test () {
var secret = {
secret1 : "1+1",
secret2 : "2+2",
secret3 : "3+3"
};
var answer = {
secret1 : 2,
secret2 : 4,
secret3 : 6
};
var otvet, countYes = 0, countNo = 3;
for (var keyS in secret) {
otvet = +prompt(secret[keyS]);
if (otvet == answer[keyS]) {
alert("Верно");
countYes++;
countNo--;
} else alert("Неверно");
}
alert("Верных ответов: " + countYes);
alert("Неверных ответов: " + countNo);
}
test();
|
Спасибо за помощ!:)
|
Почему сравнение не работает?
Ведь если в объект добавить valueOf, то знаки сравнений должны работать https://jsfiddle.net/uhz6v689/ |
DivMan, в первом случае - потому что если сравниваются переменные одного типа - никакого приведения типов не происходит. Хочешь сравнить как числа - либо сравнивай с числом, либо приводи к числу заранее.
Во втором случае - потому что после приведения типов(< и > подразумевает именно числа как аргументы, а потому приводит к числам) оба значения равны 22. И харэ давать ссылки на jsfiddle, для таких простых вещей здесь есть [js run][/js]. |
Aetae, можно txt тег использовать
[JS run][/JS] |
Цитата:
А теги добавляют некрасивый перенос строки.)) |
Нормальным ли я способом сделал?
Свойства объектов разном порядке
var objA = {
prop1: 'value1',
prop2: 'value2',
prop3: 'value3',
prop4: {
subProp1: 'sub value1',
subProp2: {
subSubProp1: 'sub sub value1',
subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5]
}
},
prop5: 1000,
prop6: new Date(2016, 2, 10)
}
var objB = {
prop5: 1000,
prop3: 'value3',
prop1: 'value1',
prop2: 'value2',
prop6: new Date('2016/03/10'),
prop4: {
subProp2: {
subSubProp1: 'sub sub value1',
subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5]
},
subProp1: 'sub value1'
}
};
function foo(ob1, ob2){
var res1 = [];
var res2 = [];
for(var prop in ob1){
res1.push(prop + ':' + ob1[prop])
if(ob1[prop] == '[object Object]'){
for(key in ob1[prop]){
res1.push(key + ':' + ob1[prop][key])
if(ob1[prop][key] == '[object Object]'){
for(kl in ob1[prop][key]){
res1.push(kl + ':' + ob1[prop][key][kl])
}
}
}
}
}
for(var prop in ob2){
res2.push(prop + ':' + ob2[prop])
if(ob2[prop] == '[object Object]'){
for(key in ob2[prop]){
res2.push(key + ':' + ob2[prop][key])
if(ob2[prop][key] == '[object Object]'){
for(kl in ob2[prop][key]){
res2.push(kl + ':' + ob2[prop][key][kl])
}
}
}
}
}
res1.sort()
res2.sort()
var obj1 = res1.join()
var obj2 = res2.join()
console.log(obj1)
console.log(obj2)
if(obj1 == obj2){
return alert('Объекты равны')
}
else{
return alert('Объекты не равны')
}
}
foo(objA, objB)
|
| Часовой пояс GMT +3, время: 13:01. |