Сравнение двух объектов
Доброго времени суток! Глупый вопрос, но все же интересно, как сделать что 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, время: 05:39. |