javascript - isEqual 函数总是返回 true

标签 javascript function

此函数检查两个对象是否具有相同的值:

_.isEqual = (a, b) => {
  const aKeys = Object.getOwnPropertyNames(a)
  const bKeys = Object.getOwnPropertyNames(b)
  if (aKeys.length !== bKeys.length) {
    return false
  }
  for (var i = 0; i < aKeys.length; i++) {
    var propName = aKeys[i]
    if (a[propName] !== b[propName]) {
      return false
    }
  }
  return true
}

我用 every 替换了 for 循环:

_.isEqual = (a, b) => {
  const aKeys = Object.getOwnPropertyNames(a)
  const bKeys = Object.getOwnPropertyNames(b)
  if (aKeys.length !== bKeys.length) return
  return aKeys.every((key, index) => {
    return key === bKeys[index]
  })
}

但是,即使 a 和 b 不相等,该函数也会返回 true

我做错了什么?

输入:

const obj1 = {
  x: 0,
  y: 0,
  z: 0
}

const obj2 = {
  x: 0,
  y: 0,
  z: 0
}

最佳答案

var first = "hello"
var second = "meow"

console.log("recognized")

isEqual(first,second);

function isEqual(a, b) {
    console.log("running")
  const aKeys = Object.getOwnPropertyNames(a)
  const bKeys = Object.getOwnPropertyNames(b)
  if (aKeys.length !== bKeys.length) {
    console.log("false")
    return false
  }
  for (var i = 0; i < aKeys.length; i++) {
    var propName = aKeys[i]
    if (a[propName] !== b[propName]) {
        console.log("false")
      return false
    }
  }
  console.log("return true")
  return true
}

如果我更改 second 则打印出 false至hello ,它会打印出true。我想说这与您的输入数据有关。您是否尝试过使用较小的输入数据集来确保一切正常?

更新:或者您的问题仅与第二次交互有关?如果是这样的话,你有两个 return声明

var first = ["shoop", "doop", "woop", "loop", "koop"]
var second = ["hamp","damp", "samp", "wamp"]

console.log("recognized")

var returned = isEqual(first,second);

console.log(returned)

function  isEqual(a, b) {
  const aKeys = Object.getOwnPropertyNames(a)
  const bKeys = Object.getOwnPropertyNames(b)
  if (aKeys.length !== bKeys.length) {
    return aKeys.every((key, index) => {
      key === bKeys[index]
    })
  }
}

这可能就是您正在寻找的。如果akeybkey长度不等于 every方法将执行其操作并返回 false在本例中为 keybkey不等于 false被返回。 if (aKeys.length !== bKeys.length)不是真的,undefined将按照js的本质返回

为了回应评论“如何通过返回 true 或 false 来完成”,您可以返回 true如果 if 语句从未运行,即 bkeys.length等于akeys.length

var first = ["shoop", "doop", "woop", "loop"]
var second = ["hamp","damp", "samp", "wamp"]

console.log("recognized")

var returned = isEqual(first,second);

console.log(returned)

function  isEqual(a, b) {
  const aKeys = Object.getOwnPropertyNames(a)
  const bKeys = Object.getOwnPropertyNames(b)
  if (aKeys.length !== bKeys.length) {
    return aKeys.every((key, index) => {
      key === bKeys[index]
    })
  }
  else{
   return true
  }
}

关于javascript - isEqual 函数总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275089/

相关文章:

javascript - 如何在 vscode 中获取字符串参数的 Javascript 自动完成?

javascript - 将鼠标悬停在 div 上可以平滑地更改背景

javascript - 如何更改 google chart api 的工具提示文本?

javascript - 如何从 Node.js 服务器将函数传递给客户端

python - 返回另一个函数 '->' 符号的函数

javascript - JS最大调用栈超过P5

javascript - 使用 JavaScript 的 HTML 选择选项不起作用

javascript - 将函数参数作为字符串在函数本身中使用时遇到问题

c - 数列中的第 n 个元素,其中数字可被其数字之和整除

c++ - 在不移动光标的情况下模拟鼠标点击