如何检查一个数组中的对象是否有特定的格式?
回答 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");
}
但它不会通过测试。
hasOwnProperty - 你漏掉了一个T
- James 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));
#2楼
得票数 1
hasOwnProperty拼错了,而且if条件应该先检查属性是否存在,然后再检查typeof,比如说
tokens[i].hasOwnProperty("tokenName") &&
typeof tokens[i].tokenName === "string"