如何检查一个数组中的对象是否有特定的格式?

回答 2 浏览 34 2022-11-20

我有一个对象的数组,名为tokens,这个数组中的每个对象都有这样的格式。{tokenName: string}.我想测试这个数组中的每个元素是否具有完全相同的格式,否则就会出现错误。

我已经试过这个了。

for (let i = 0; i < tokens.length; i++) {
          if (
            typeof tokens[i].tokenName === "string" &&
            tokens[i].hasOwnProperty("tokenName")
          ) {
            // do stuff
          } else {
            throw new Error("Invalid array format");
 }

但它不会通过测试。

bko00 提问于2022-11-20
hasOwnProperty - 你漏掉了一个TJames 2022-11-20
那么到底是什么出了问题?发生了什么你意想不到的事情?Pointy 2022-11-20
如果我传递一个具有这种特定格式的数组,它就会抛出一个错误。bko00 2022-11-20
2 个回答
#1楼 已采纳
得票数 1

使用every来迭代对象数组,并将测试应用于每个对象。

在这个例子中tokens1所有的对象都有tokenName键,而且都是字符串。tokens2有一个值,是一个整数。tokens3有一个tokenAge的键。

const tokens1=[{tokenName:"name1"},{tokenName:"name2"},{tokenName:"name3"},{tokenName:"name4"}],tokens2=[{tokenName:"name1"},{tokenName:"name2"},{tokenName:9},{tokenName:"name4"}],tokens3=[{tokenName:"name1"},{tokenName:"name2"},{tokenAge:"name3"},{tokenName:"name4"}];

// Accept an array of objects
function checkTokenName(tokens) {
  
  // Check the every token object in the
  // array passes the condition - true if it
  // does, false if it doesn't
  return tokens.every(token => {
    return (
      token.hasOwnProperty('tokenName')
      && typeof token.tokenName === 'string'
    );
  });
}

console.log(checkTokenName(tokens1));
console.log(checkTokenName(tokens2));
console.log(checkTokenName(tokens3));

Andy 提问于2022-11-20
#2楼
得票数 1

hasOwnProperty拼错了,而且if条件应该先检查属性是否存在,然后再检查typeof,比如说

tokens[i].hasOwnProperty("tokenName") &&
typeof tokens[i].tokenName === "string" 
Tarmah 提问于2022-11-20
标签