为了账号安全,请及时绑定邮箱和手机立即绑定

我的 validateKey 函数没有返回预期的键值

我的 validateKey 函数没有返回预期的键值

守着星空守着你 2022-06-16 16:37:06
此函数的目标是验证密钥。如果键匹配且不存在其他键,则应返回 true。如果没有匹配的键或者它们小于预期的键,它应该返回 false。该函数validateKeys(object, expectedKeys)应该返回true或false一般。我贴了详细code的给你看程序流程//running the function with `objectA` and `expectedKeys`// should return `true`const objectA = {  id: 2,  name: 'Jane Doe',  age: 34,  city: 'Chicago',};// running the function with `objectB` and `expectedKeys`// should return `false`const objectB = {  id: 3,  age: 33,  city: 'Peoria',};const expectedKeys = ['id', 'name', 'age', 'city'];function validateKeys(object, expectedKeys) {  // your code goes here    for (let i=0; i<expectedKeys.length;i++) {        if (Object.keys(object).length === expectedKeys[i]) {                return false;        }else if (expectedKeys[i] < Object.keys(object) || Object.keys(object).length > expectedKeys[i] ) {            return false;        }else        return;    }return true;} /* From here down, you are not expected to    understand.... for now :)     Nothing to see here!*/function testIt() {  const objectA = {    id: 2,    name: 'Jane Doe',    age: 34,    city: 'Chicago',  };  const objectB = {    id: 3,    age: 33,    city: 'Peoria',  };  const objectC = {    id: 9,    name: 'Billy Bear',    age: 62,    city: 'Milwaukee',    status: 'paused',  };  const objectD = {    foo: 2,    bar: 'Jane Doe',    bizz: 34,    bang: 'Chicago',  };  const expectedKeys = ['id', 'name', 'age', 'city'];  if (typeof validateKeys(objectA, expectedKeys) !== 'boolean') {    console.error('FAILURE: validateKeys should return a boolean value');    return;  }  if (!validateKeys(objectA, expectedKeys)) {    console.error(      `FAILURE: running validateKeys with the following object and keys      should return true but returned false:      Object: ${JSON.stringify(objectA)}      Expected keys: ${expectedKeys}`    );    return;  }
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您可能需要以下内容:


function validateKeys(object, expectedKeys) {

  let keys = Object.keys(object);


  // Check if both arrays have the same length

  // if not, we can exit early

  if (keys.length !== expectedKeys.length) {

    return false;

  }


  // If they do have the same length, then let's see if they

  // have all the keys, if not, return false

  for (let index = 0; index < expectedKeys.length; index++) {

    if (!expectedKeys.includes(keys[index])) {

        return false;

    };

  }


  // else return true, the keys are valid

  return true;

}

//running the function with `objectA` and `expectedKeys`

// should return `true`


const objectA = {

  id: 2,

  name: "Jane Doe",

  age: 34,

  city: "Chicago",

};


// running the function with `objectB` and `expectedKeys`

// should return `false`

const objectB = {

  id: 3,

  age: 33,

  city: "Peoria",

};


const expectedKeys = ["id", "name", "age", "city"];


function validateKeys(object, expectedKeys) {

  let keys = Object.keys(object);

  

  // Check if both arrays have the same length

  // if not, we can exit early

  if (keys.length !== expectedKeys.length) {

    return false;

  }


  // If they do have the same length, then let's see if they

  // have all the keys, if not, return false

  for (let index = 0; index < expectedKeys.length; index++) {

    if (!expectedKeys.includes(keys[index])) {

        return false;

    };

  }


  // else return true, the keys are valid

  return true;

}


/* From here down, you are not expected to 

   understand.... for now :)  



   Nothing to see here!


*/


function testIt() {

  const objectA = {

    id: 2,

    name: "Jane Doe",

    age: 34,

    city: "Chicago",

  };


  const objectB = {

    id: 3,

    age: 33,

    city: "Peoria",

  };


  const objectC = {

    id: 9,

    name: "Billy Bear",

    age: 62,

    city: "Milwaukee",

    status: "paused",

  };


  const objectD = {

    foo: 2,

    bar: "Jane Doe",

    bizz: 34,

    bang: "Chicago",

  };


  const expectedKeys = ["id", "name", "age", "city"];


  if (typeof validateKeys(objectA, expectedKeys) !== "boolean") {

    console.error("FAILURE: validateKeys should return a boolean value");

    return;

  }


  if (!validateKeys(objectA, expectedKeys)) {

    console.error(

      `FAILURE: running validateKeys with the following object and keys

      should return true but returned false:

      Object: ${JSON.stringify(objectA)}

      Expected keys: ${expectedKeys}`

    );

    return;

  }


  if (validateKeys(objectB, expectedKeys)) {

    console.error(

      `FAILURE: running validateKeys with the following object and keys

      should return false but returned true:

      Object: ${JSON.stringify(objectB)}

      Expected keys: ${expectedKeys}`

    );

    return;

  }


  if (validateKeys(objectC, expectedKeys)) {

    console.error(

      `FAILURE: running validateKeys with the following object and keys

      should return false but returned true:

      Object: ${JSON.stringify(objectC)}

      Expected keys: ${expectedKeys}`

    );

    return;

  }


  if (validateKeys(objectD, expectedKeys)) {

    console.error(

      `FAILURE: running validateKeys with the following object and keys

      should return false but returned true:

      Object: ${JSON.stringify(objectD)}

      Expected keys: ${expectedKeys}`

    );

    return;

  }


  console.log("SUCCESS: validateKeys is working");

}


testIt();


查看完整回答
反对 回复 2022-06-16
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

您正在将string(expectedKeys[i]) 与 number(length)进行比较。Javascript不会给你一个错误,但它总是会评估为假。此外,您在 for 循环中放置了一个 return,当遇到它时会中断循环。



查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信