Javascript-具有特定值的令牌的数组
Javascript- Arrays with tokens that are a certain value
假设我有数组['dcab', 'feac', 'gwad', 'dnae']
但想让它使每个'a'
都在自己的令牌中,例如['dc', 'a', 'b', 'fe', 'a', 'c', 'gw', 'a', 'd', 'dn', 'a', 'e'];
。我该怎么做?谢谢!
var x = ['dcab', 'feac', 'gwad', 'dnae'];
x = x.join('-').replace(/a/g,"-a-").split('-');
<小时 />更新:正如@Robert指出的,如果在开头或结尾有'a'
,这将导致''
空白字符串出现在最终数组中。您可以通过执行以下操作来删除空白字符串来解决此问题:
x.join('-').replace(/a/g,"-a-").split('-').filter(function(x) { return x!='' });
或者,对于性能可能存在问题的较大数组,您可以使用其他.replace()
简单地删除额外的分隔符(这可能是更好的方法,尽管它不是那么可读):
x.join('-').replace(/a/g,"-a-").replace(/^'-|'-(?='-)|'-$/g,'').split('-');
当然,不用说,你的分隔符可以是任何东西(它不一定是'-'
),一旦你可以保证它不会在你的任何字符串中。
var arr = ['dcab', 'feac', 'gwad', 'dnae'];
var result = [];
var i;
var s;
for (i = 0; i < arr.length; i++) {
s = arr[i].split('a');
result.push(s[0]);
if (s.length > 1) {
result.push('a');
result.push(s[1]);
}
}
仅当每个字符串只包含一个或零个"a"字符时才有效。如果拆分结果可以包含更多内容,则可以循环访问拆分结果。
var arr = ['dcab', 'feac', 'gwad', 'dnae'];
var new_arr = arr.reduce(function(ret, val) {
ret.push.apply(ret, val.split(/(a)/))
return ret;
}, []);
请注意,某些较旧的浏览器不支持捕获和保留拆分字符。
像这样更简洁一点...
var new_arr = arr.reduce(function(ret, val) {
return ret.concat(val.split(/(a)/));
}, []);
首先,您单独处理数组元素并提取它们的标记。然后合并结果。
您正在寻找 3 种类型的代币:
- 一个"a"。正则表达式是
/a/
。 - 其他字符的序列 =>
/[^a]+/
- 当原始元素是空字符串时,您希望保留该 =>
/^$/
因此,令牌的正则表达式总共是 /a|[^a]+|^$/
.要提取所有令牌,您需要包含全局搜索标志g
。
var strings = ['dcab', 'feac', 'gwad', 'dnae'];
var arrays = strings.map(function(string) {
return string.match(/[^a]+|a|^$/g);
});
match
返回一个数组,其中包含它在字符串中找到的标记。剩下要做的就是连接所有这些数组。
幸运的是,有一个数组方法专门用于此特定目的。但不幸的是,使用未知数量的数组并不容易:
var tokens = arrays[0].concat(arrays[1], arrays[2], ...
首先,您不知道有多少个数组。因此,无法传递正确数量的参数。但也许你甚至不知道array[0]
是否存在。因此,您最好使用空数组作为起点。
不过,有一些方法可以解决这个问题。
一种解决方案是将串联划分为多个步骤:
var tokens = arrays.reduce(function(result, array) {
return result.concat(array);
}, []); // note the initial empty array
但对我来说,使用apply
并一次传递所有数组似乎更合适:
var concat = Array.prototype.concat;
var tokens = concat.apply([], arrays);
所有代码放在一起将如下所示:
var strings = ['dcab', 'feac', 'gwad', 'dnae'];
var concat = Array.prototype.concat;
var tokens = concat.apply([], strings.map(function(string) {
return string.match(/[^a]+|a|^$/g);
}));
- 使用Javascript向ID数组发送通知时出现Facebook访问令牌错误
- 为测验应用程序洗牌2个以上的数组
- Javascript-具有特定值的令牌的数组
- 使用变量初始化数组:意外的令牌 +
- JavaScript数组-意外的令牌
- 可预测的 Javascript 数组洗牌
- 两级数组中的对象.导致意外令牌 [.
- 在 JavaScript 中随机化(洗牌)带有对象的数组
- 关于Javascript数组洗牌函数
- 有没有简单的方法可以随机洗牌 JavaScript 数组但固定到给定键
- Javascript 数组洗牌
- 将数组项用作对象中的键时出现意外的令牌错误
- JavaScript 数组洗牌器不起作用
- AngularJS分析JSON数组对象意外的令牌:
- 以固定位置洗牌数组作为例外
- & # 39;意外令牌# 39;使用JSON时.解析PHP中生成的数组
- 传递对象数组-意外令牌[
- 洗牌数组与扭转
- 当数组中的一个元素被删除时,如何使用Angularjs重新洗牌数组中的数字
- JSON 和多维数组上的“未捕获语法错误:意外的令牌 o”