2016-07-28 28 views

回答

1

您可以通过比较内容的数据类型来分开数组,因为{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]); 
} 
1
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); 
1

您可以使用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); 
0

您希望将源滤镜阵列。

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卷饼的美味。 ;)

0

您可以使用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);