剪掉数组中的最后一位数字

时间:2016-11-30 16:37:25

标签: 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'];

6 个答案:

答案 0 :(得分:1)

对于第一部分,您只需使用filter过滤掉不包含3位数的数字。



var arr = [1234, 234, 456, 356778, 56];
var result = arr.filter(function(num) {
  return num < 1000 && num >= 100;
});

console.log(result);
&#13;
&#13;
&#13;

对于第二部分,您可以使用map。只需将数字转换为字符串即可。如果它的长度大于3,则取出由字符串的前3个元素组成的子字符串,然后转换回数字。

&#13;
&#13;
var data = [1234, 123, 4567, 3333];
var result = data.map(function(num) {
  num = num.toString().substring(0, 3);
  return parseInt(num);
});

console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您想要的只是Array.filterArray.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
})

答案 2 :(得分:0)

要处理数字是3位还是4位数,请检查每个数字是否在100&lt; = num&lt; 10000

  let result = arr.filter(function(val) {
    // is a 3 or 4 digit number
    return 100 >= val && num < 10000;
  });

要将四位数字剪辑为3位数,我们可以将所有四位数字除以10并将它们转换为整数

  let clippedResult = result.map(function(val) {
    return val >= 1000 ? Math.floor(val / 10) : val
  });

答案 3 :(得分:0)

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);

答案 4 :(得分:0)

此解决方案将输入数组转换为1234,23C,456,356778,56形式的字符串,然后使用regexp查找所需元素。

&#13;
&#13;
var arr = ['1234','23C','456','356778', '56'];

console.log(String(arr).match(/\b\w{3}(?=\w?\b)/g));
&#13;
&#13;
&#13;

英文:

  

查找所有以字边界开头的子字符串(\b,它将在逗号之后或字符串的开头),然后有三个字母数字字符,并向前看({{1} })may((?=)在下一个单词边界(逗号或字符串结尾)之前有一个附加字符。

是的,这个使用字符串元素,只要这些字符串由字母数字组成(换句话说,就是那些不会破坏字数的事情({{1} })逻辑。

答案 5 :(得分:-1)

 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

这对我有用。