![](/img/trans.png)
[英]Test whether all array elements are factors of a number - return inside a for loop
[英]How can I tell whether or not an element inside an array is a number or a word (all elements in quotes)
背景信息:我有一个数组
this.someArray = ["Word", "123", "456"]
this.someArray 是动态写入的(数组元素不是硬编码的)
我需要将所有数字项目转换为数字(是的,我意识到这可能没有意义,本质上这是我想要的结果 - 数字没有引号但保留原样):
["Word", 123, 456]
所以我在如何实现这一点方面考虑的步骤:
为了实现这一点,我有:
isNumber(number) {
return !isNaN(parseFloat(number)) && !isNaN(number-0)
}
使用 for each 循环测试每个元素是单词还是数字
this.someArray.forEach(element => { this.isNumber(element) });
写一个 if 语句(如果 this.someArray 中的元素是一个数字,然后从该元素中删除引号)
但是,我不确定第 2 步是否真的是正确的做法,我不确定如何编写第 3 步
有没有办法做到这一点?
更多信息:
这是动态生成的数组的样子:
这是代码:
this.someArray = this.biggerArray.map((n) => {
const data = [];
for (var key of Object.keys(n)) {
data.push(n[key].data);
}
return data;
});
我认为普通的.map
会更容易 - 检查字符串是否由带有正则表达式的所有数字组成,如果是,请在其上调用Number
:
const arr = ["Word", "123", "456"]; const newArr = arr.map( str => /^\\d+$/.test(str) ? Number(str) : str ); console.log(newArr);
^\\d+$
表示:
^
- 字符串的开始\\d+
- 一位或多位数字$
- 字符串结尾如果数字可能包含小数,则为小数部分添加一个可选组:
const arr = ["Word", "123", "456", '12.45']; const newArr = arr.map( str => /^\\d+(?:\\.\\d+)?$/.test(str) ? Number(str) : str ); console.log(newArr);
对于['Process', '1287']
数组,它仍然按预期工作:
const arr = ['Process', '1287']; const newArr = arr.map( str => /^\\d+(?:\\.\\d+)?$/.test(str) ? Number(str) : str ); console.log(newArr);
这种方法也适用于引号内的小数。
for (let i in someArray) {
if (parseFloat(someArray[i])) {
someArray[i] = parseFloat(someArray[i]);
}
}
这是一种更短的方法。
for (let i in someArray) {
parseFloat(someArray[i]) && (someArray[i] = parseFloat(someArray[i]));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.