gpt4 book ai didi

javascript - 在 JavaScript 中对数组索引执行架构验证

转载 作者:行者123 更新时间:2023-12-03 00:54:39 25 4
gpt4 key购买 nike

我有一个包含字符串和数字的数组。我知道哪个数组索引将包含数字,哪个数组索引将包含字符串。还有比这更好的方法来验证类型吗?数组中的所有值都将存储为字符串,但对于我期望整数的值,它应该是以字符串格式存储的有效数字。如果需要字符串,则它必须是任何字符串,并且不应该是数字(可以是字母数字)。

假设数组中只能有 5 个索引:

[0]-> Integer
[1] -> String
[2] -> String
[3] -> Integer
[4] -> String

var validArray = ["145", "test1", "test", "1233", "blah"];

function validateArray() {
if(isNaN(validArray[0]) || isNaN(validArray[3])) {
return false;
}
if(!isNaN(validArray[1]) || !isNaN(validArray[2] || !isNaN(validArray[4])) {
return false;
}

}

另一个选择是我可以分成多个 if 语句,以便我知道哪个索引导致了问题。

在 NodeJS 中是否有更简洁的方法来做到这一点? (验证数组并指出哪个索引导致问题(如果存在任何错误)。

最佳答案

我会通过创建一个更通用的验证函数来解决这个问题,然后我们可以将其用作不同形状数据的验证器。

// Expected shape
const t = [
"Number",
"String",
"String",
"Number",
"String",
]

// Test data - valid
const d = ["1", "a", "b", "2", "c"]
// Test data - invalid
const dInvalid = ["b", "a", "b", "2", "c"]

function validate(data, types) {
// Map through shape
return types.map((item, i) => {
switch(item){
// Switch by type and do expected comparison
case "Number": return !Number.isNaN(Number(data[i]))
case "String": return Number.isNaN(Number(data[i]))
default: return false // Example defaults to false which might not be what you want
}
})
}

console.log(validate(d, t)) // => [true, true, true, true, true]
console.log(validate(dInvalid, t)) // => [false, true, true, true, true]

//If want to check array validity
const valid = validate(d, t)

console.log(valid.every(item => item === true)) // => true
// OR
console.log(!valid.includes(false)) // true

edit. added function to return invalid indexes

function invalidIndexes(data){
let indexes = []
data.forEach((item, i) => {
if(item === false){ indexes.push(i) }
})
return indexes // example output. [1,3]
}

关于javascript - 在 JavaScript 中对数组索引执行架构验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52886927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com