首页 > 解决方案 > 对象迭代和比较行为不正确

问题描述

以下用于解决字谜的代码适用于 ES6(已注释)迭代对象并与 ES5 代码示例进行比较aCharMap的方式,bCharMap但不适用于 ES5 代码示例。

为什么使用 ES5 版本时代码的行为会有所不同,或者我遗漏了什么?

function anagrams(stringA, stringB) {
  const aCharMap = buildCharMap(stringA);
  const bCharMap = buildCharMap(stringB);

  if (Object.keys(aCharMap).length !== Object.keys(bCharMap).length) {
    return false;
  }

  //  for (let char in aCharMap) {
  //    if (aCharMap[char] !== bCharMap[char]) {
  //      return false;
  //    }
  //  }

  Object.keys(aCharMap).forEach(function(char) {
    if (aCharMap[char] !== bCharMap[char]) {
      return false;
    }
  });

  return true;
}

function buildCharMap(str) {
  const charMap = {};

  for (let char of str.replace(/[^\w]/g, '').toLowerCase()) {
    charMap[char] = charMap[char] + 1 || 1;
  }

  return charMap;
}

console.log(anagrams('one one', 'two two two'));

标签: javascriptjavascript-objects

解决方案


推荐阅读