Javascript 从数组中剪掉最后的数字

Javascript 从数组中剪掉最后的数字,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我有以下数组 var arr = ['1234','23C','456','356778', '56'] 我想删除小于3个字符且大于4个字符的数组元素。最终结果如下 arr = ['1234', '23C', '456']; //only 3 and 4 digits in the array. 其次,我想做以下几点。如果“arr”的元素长度超过3个字符,我需要删除最后一个数字来剪辑。最终的“数据”数组应该如下所示 arr = ['123', '23C', '456']; 您只需要Ar

我有以下数组

var arr = ['1234','23C','456','356778', '56']
我想删除小于3个字符且大于4个字符的数组元素。最终结果如下

arr = ['1234', '23C', '456'];  //only 3 and 4 digits in the array. 
其次,我想做以下几点。如果“arr”的元素长度超过3个字符,我需要删除最后一个数字来剪辑。最终的“数据”数组应该如下所示

arr = ['123', '23C', '456'];

您只需要
Array.filter
Array.map
,并将字符串转换为数字

var arr = [1234,234,456,356778, 56]

var newArr = arr.filter((num) => {
  // convert number to string
  var str = '' + num
  // if length is 3 or 4 - return true (element will be in newArr)
  return str.length === 3 && str.length === 4 
})
第二种情况

var newArr = arr.map((num) => {
  var str = '' + num
  // is str is longer than 3, cut it to length of 3
  if(str.length > 3)
    str = str.substring(0, 3)
  // return str converted to number
  return +str
})

对于第一部分,您可以使用
filter
过滤掉不是由3位数字组成的数字

<代码>var arr=[1234、234、456、356778、56]; var结果=arr.filter(函数(num){ 返回num<1000&&num>=100; });
控制台日志(结果)要处理数字是3位还是4位,请检查每个数字是否在100<代码>功能过滤器阵列(arr、低位数字、高位数字)范围内{ var newArr=[]; 对于(i=0;i=lowDigits&&lengthlowDigits){ val=val.substring(0,低位数字); } 新到达推力(val); } } 返回newArr; } var arr=['1234'、'234'、'456'、'356778'、'56']; arr=滤波器阵列(arr,3,4); 控制台日志(arr);
此解决方案将输入数组转换为格式为
1234,23C,456356778,56的字符串,然后使用regexp查找所需的元素

var-arr=['1234'、'23C'、'456'、'356778'、'56'];
log(字符串(arr).match(/\b\w{3}(?=\w?\b)/g))
让isValidElement=updated\u ImportDetails.ImportData.filter(函数(num){
//是3位或4位数字

return num.length>2&&num.length check alecTMH-我在这里有一个不同的条件,我无法从该链接中找出答案。您是否尝试对两个单独的数组执行两种不同的操作?还是尝试将数组筛选为3s和4s,然后将值的大小更改为4或更多?KevBot。是的。将数组从3s筛选为3s和4s,4s,5s,2s,然后将4s改为所有3s…我尝试在线搜索,但找不到任何与此相关的内容。当然,你找不到。没有其他人有这个问题。但是你可以找到数千个关于如何筛选数组或如何转换数组中的项的参考。@grzesiekgs-你确定array.filter中使用的语法吗。我有错误…我是从内存中写出来的。这是ES6语法,你可以用
函数(arg)
@grzesiekgs替换
(arg)=>
-你能编辑你的答案吗?这样我就可以接受它作为正确的答案了`必要吗?我认为
str.length==3&&str.length==4
不起作用。你测试过这个吗?@megawac-我的数组元素可能包含字母数字:(在这种情况下,这将失败。对吗?模数并没有达到他想要的效果。啊,我的错,我认为它是切断了开始而不是结束。修复了疏忽是的,因为它将它们视为字符串。@sigil-这不能正常工作。如果我做arr=filterArray(arr,6,7)…我得到这个结果-->[“004561”,“045449”,“00456”]。也就是说,它在输出中也显示了5个字符的值。'00456'@AduRao您测试时的输入数组是什么?我刚刚用
filterArray(arr,6,7)
运行了
[“004561”,“045449”,“00456”]
,并按预期返回
[“004561”,“045449”]
  let result = arr.filter(function(val) {
    // is a 3 or 4 digit number
    return 100 >= val && num < 10000;
  });
  let clippedResult = result.map(function(val) {
    return val >= 1000 ? Math.floor(val / 10) : val
  });
function filterArray(arr,lowDigits,highDigits){
    var newArr=[];
    for(i=0;i<arr.length;i++){
         val=arr[i];
         length=val.length;
         if(length>=lowDigits&&length<=highDigits){
          if(length>lowDigits){
          val=val.substring(0,lowDigits);
          }
          newArr.push(val);
         }
     }
     return newArr;
}

var arr = ['1234','234','456','356778','56'];
arr=filterArray(arr,3,4);
console.log(arr);
 let isValidElement = updated_ImportDetails.ImportData.filter(function (num) {
                    // is a 3 or 4 digit number
                    return num.length > 2 && num.length <4 ;
                });




                var result = isValidElement.map(function (num) {
                    num = num.substring(0, 3);
                    return num;
                });

                result = result.filter(function (elem, index, self) {
                    return index == self.indexOf(elem);
                })    //removes duplicates from the array