代码之家  ›  专栏  ›  技术社区  ›  user5405873

如何根据字符串在数组中的出现情况获取结果

  •  0
  • user5405873  · 技术社区  · 8 年前

    嗨,我有这个测试数据,我想得到这样的结果

    na ===> not available
    
    error ===> error
    
    ok  ===> ok
    
    arr1 = ['na','na','ok','ok','na']  => na 
    
    arr2 = ['ok','ok','ok','ok','error'] => error
    
    arr2 = ['ok','ok','ok','ok','ok'] => ok
    
    3 回复  |  直到 8 年前
        1
  •  0
  •   guijob    8 年前

    假设您想要作为结果 element array ,这可能有助于:

    var arr = ['na','na','ok'];
    
    console.log(getMoreOccurencesElement(arr));
    
    arr.push('ops');
    arr.push('ops');
    arr.push('ops');
    
    console.log(getMoreOccurencesElement(arr));
    
    function getMoreOccurencesElement(arr) {
    return arr
      .reduce((acc, ele) => {
        var prev = acc.find(x => x.value == ele);
        if(prev) {
          prev.counter = prev.counter + 1;
          return acc;
        }
        return acc.concat({value: ele, counter: 1})
      }, [])
      .sort((a, b) => b.counter - a.counter)[0].value;
    }
        2
  •  0
  •   gavgrif    8 年前

    使用elseif或开关确定阵列中是否存在“na”或“错误”。

    逻辑基于“na”或“error”的第一个实例将数组设置为该类型。不确定逻辑是否应该查找所有实例,然后根据na/error的总数/greeatest数设置状态。

    编辑-我添加了一个switch语句选项来演示该路径-请注意,开关的触发器是indexOf()表达式的结果,而不是字符串的存在。

    arr1 = ['na','na','ok','ok','na'];
    arr2 = ['ok','ok','ok','ok','error'];
    arr3 = ['ok','ok','ok','ok','ok'];
    
    function checkArray(arr) {
     if ( arr.indexOf('na') !== -1 ) {
      return "na";
     } else if(arr.indexOf('error') !== -1) {
        return "error";
     } else {
       return "ok";
     }
    }
    
    
     console.log("Using an elseif block")
     console.log(checkArray(arr1)); // gives 'na'
     console.log(checkArray(arr2)); // gives 'error'
     console.log(checkArray(arr3)); // gives 'ok'
     
     
    
     
     function checkArray2(arr) {
      switch(true) {
        case  arr.indexOf('na') !== -1:
            return "na"
            break;
        case  arr.indexOf('error') !== -1:
            return "error"
            break;
        default:
            return "ok"
      }
    }
    
     console.log(" ")
     console.log("Using a switch statement")
     console.log(checkArray2(arr1)); // gives 'na'
     console.log(checkArray2(arr2)); // gives 'error'
     console.log(checkArray2(arr3)); // gives 'ok'
        3
  •  0
  •   user8893882 user8893882    8 年前

    arr1 = ['na', 'na', 'ok', 'ok', 'na'];
    arr2 = ['ok', 'ok', 'ok', 'ok', 'error'];
    arr3 = ['ok', 'ok', 'ok', 'ok', 'ok'];
    
    function count(arr) {
      var na_count = arr.filter(function(a) {return a === 'na';}).length;
      var error_count = arr.filter(function(a) {return a === 'error';}).length;
      var ok_count = arr.filter(function(a) {return a === 'ok';  }).length;
      var length = arr.length
      if (length === ok_count) {
        return 'ok';
      }else if (na_count > error_count) {
        return 'na';
      }else {
        return 'error';
      }
    
    }
    console.log('using arr1', count(arr1))
    console.log('using arr2', count(arr2))
    console.log('using arr3', count(arr3))