【问题标题】:checks the data type of array with loop and conditionals使用循环和条件检查数组的数据类型
【发布时间】:2021-11-23 00:30:55
【问题描述】:

我想检查数组是否有相同的数据类型。我在这里找到了其他解决方案,但我想用 for 循环和 if 条件来做到这一点。 有人可以解释一下,为什么我的代码不起作用:

非常感谢!

function sameDataType(array){
    const helper = []
    for(let i = 0; i < array.length; i++){
        let dataType0 = typeof(array[i])
        let dataType1 = typeof(array[i+1])
        if(dataType0 === dataType1){
            helper.push(1)
        } else {
            helper.push("not")
            }    
    }    
    for(let j = 0; j < helper.length; j++){
        if(helper[j] === helper[j+1]){
            return "same"
        } else {
            return "different"
        }
    }
}
console.log(sameDataType([1, 1, "string"]))

【问题讨论】:

  • 你期望输出是什么?全部相同时相同,即使其中之一不同时也不同?
  • 是的,你是对的。
  • 你能看看这个使用数组映射方法的链接吗,stackoverflow.com/questions/41554604/…

标签: javascript arrays types


【解决方案1】:

请使用 Array.map 和 Array.filter 函数。

首先你得到类型数组。

然后通过删除重复值对其进行过滤。

然后检查长度。

像这样。

function sameDataType1(array){
    return array.map(val => typeof val).filter((val, index, self) => self.indexOf(val) === index).length === 1 ? "same" : "different";
}
console.log(sameDataType1([1, 1, "string"]))

【讨论】:

    【解决方案2】:

    将尝试仅改进您的代码。

    首先检查数组是否有足够的元素。如果只有一个元素,只需返回same。 然后确保你运行你的循环直到正确的索引。请注意,您的代码中有 i+1j+1。你做arr[arr.length+1],你得到undefined

    当你只有两个元素时也要检查条件。

    function sameDataType(array){
    if(array.length > 1 ) {
        const helper = []
        for(let i = 0; i < array.length - 1; i++){
            let dataType0 = typeof(array[i])
            let dataType1 = typeof(array[i+1])
            if(dataType0 === dataType1){
                helper.push(1)
            } else {
                helper.push("not")
                }    
        }    
     
        if(helper.length  === 1 ){
        if(helper[0] === 1) return "same";
        return "different";
        
        }
        for(let j = 0; j < helper.length-1; j++){
            if(helper[j] === 1 && helper[j] === helper[j+1]){
                return "same"
            } else {
                return "different"
            }
        }
    }
    return "same";
    }
    console.log(sameDataType([1, 1 , "string"]))
    console.log(sameDataType([1, "string:" ]))
    console.log(sameDataType(["string", "string" , "string"]))

    【讨论】:

    • 非常感谢!但你为什么使用
    • 如果i = array.length - 1i+1 = array.length。因此,对于长度为 3 的数组,您不能正确执行数组 [3],即 undefined。并且将您的元素与 undefined 进行比较是错误的。为什么这样做
    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多