假设我有像a=[1,3,4,{roll:3},7,8,{roll:2},9]
阵列,我想两个阵列具有以下内容:的JavaScript - 单独的混合阵列分成适当类型
b=[1,3,4,7,8,9]
c=[{roll:3},{roll:2}]
。
如何分开数组的内容?
假设我有像a=[1,3,4,{roll:3},7,8,{roll:2},9]
阵列,我想两个阵列具有以下内容:的JavaScript - 单独的混合阵列分成适当类型
b=[1,3,4,7,8,9]
c=[{roll:3},{roll:2}]
。
如何分开数组的内容?
您可以通过比较内容的数据类型来分开数组,因为{roll:2}
的类型为object
,数字类型为number
。
var numbers = [];
var rolls = [];
for (var i = 0; i < a.length; i++) {
if (typeof a[i] === 'object')
rolls.push(a[i]);
else
numbers.push(a[i]);
}
var a=[1,3,4,{roll:3},7,8,{roll:2},9];
var numbers = [];
var objs = [];
for(var item in a)
{
if(typeof a[item] !== 'number')
{
objs.push(a[item]);
}
else{
numbers.push(a[item]);
}
}
console.log (numbers);
console.log(obj);
您可以使用JavaScript阵列reduce功能类似下面
var a = [1, 3, 4, {
roll: 3
}, 7, 8, {
roll: 2
}, 9];
var result = a.reduce(function(res, item) {
if (typeof item === 'object') {
res.c.push(item);
} else {
res.b.push(item);
}
return res;
}, {
b: [],
c: []
});
console.log(result.b);
console.log(result.c);
您希望将源滤镜阵列。
var a = [ 1 , 3 , 4 , {roll:3} , 7 , 8 , {roll:2} , 9 ];
var b = a.filter(function(element) { return Number(element) === element; });
var c = a.filter(function(element) { return Number(element) !== element; });
的关键是如何将两种阵列中的项目的区分:我以前就可以把测试转述为“如果该元素转换为一数产生元件本身,它是一个数字”。在javascript中进行类型检测是一个着名的项目,我不会在这里讨论它。请参阅道格拉斯克罗克福德的Javascript:好的部分关于该主题的扩展讨论,以及优秀的示例代码。根据您期望在阵列中找到的元素种类,您可能需要选择更精细的鉴别器。你可以很容易地在浏览器的javascript控制台中测试这些东西。我这样做是为了验证我的测试:
> Number(4) === 4
< true
-
这种方法迭代源阵列的两倍以上。如果你关心性能 - 如果源数组中有成千上万的项目,这只会是一个问题,或者如果你的测试非常昂贵 - 那么你可以用测试每个项目的forEach
完成相同的结果,将其附加到两个输出数组中的一个(或发出类似{ numbers: [], items: {}}
之类的reduce
)。
-
META:您的标题不是很好。如果你没有在你的问题上付出一些努力,你就不应该期望在答案中付出很多努力。我们都在做我们的chipotle卷饼的美味。 ;)
您可以使用Array#forEach
的单个循环,并根据元素的类型进行推送。
var a = [1, 3, 4, { roll: 3 }, 7, 8, { roll: 2 }, 9],
b = [],
c = [];
a.forEach(function (el) {
(typeof el === 'object' ? c : b).push(el);
});
console.log(b);
console.log(c);
你应该有更好的标题,你尝试的东西吗? –