【发布时间】:2020-06-28 08:28:59
【问题描述】:
在第二个for...in 和if (map[t[i]]) 处使用断点单步执行,预期为false,但实际为true。有人可以帮助解释为什么会这样吗?
const s = 'rat',
t = 'car';
const isAnagram = (s, t) => {
if (s.length !== t.length) {
return false;
}
const map = {};
for (let i in s) {
map[s[i]] ? map[s[i]]++ : (map[s[i]] = 1);
}
for (let i in t) {
// this works
// if (map[t[i]]) {
// map[t[i]]--;
// } else {
// return false;
// }
// this doesn't ?¿?¿
map[t[i]] ? map[t[i]]-- : false;
}
return true;
};
console.log(isAnagram(s, t)); // false
【问题讨论】:
-
这个
map[s[i]] ? map[s[i]]++ : map[s[i]] = 1;是一种愚蠢和糟糕的做法。最好明确地这样做:map[s[i]] = map[s[i]] ? (map[s[i]]+1) : 1; -
map[t[i]] ? map[t[i]]++ : false;不会从函数返回。它只是产生值false,但你从不使用它。例如,这与执行var a = 1; false; a += 1相同 -false是一个无关紧要的声明。 -
@VLAZ btw 我编辑为
--而不是++。您如何将其重写为三进制? -
您不能将
return作为条件表达式的一部分。该运算符接受三个表达式,但return是一个语句。它不能作为条件表达式的一部分嵌套。 -
@VLAZ 谢谢这更有意义 - 欣赏它!
标签: javascript conditional-operator