2016-07-28 5 views
-2

は私がa=[1,3,4,{roll:3},7,8,{roll:2},9]のような配列を持っていると私は、次の内容を持つ2つの配列たいと:はJavaScript - セパレート混合配列の適切なタイプに

b=[1,3,4,7,8,9]

c=[{roll:3},{roll:2}]を。

アレイの内容をどのように分けることができますか?

+5

あなたはよりよいタイトルを持っている必要があり、あなたが何かをしようとしたのですか? –

答えて

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

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

の下にあなたがソース配列をフィルタするようにあなたはjavascript配列reduce機能を使用することができます。

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の型検出は有名なプロジェクトですが、ここでは取り上げません。 Douglas CrockfordのJavascript:Good Partsを参照して、トピックに関する詳細な議論と優れたサンプルコードを参照してください。配列で見つかると予想される要素の種類に基づいて、より洗練されたディスクリミネータを選択する必要があります。これらのことをブラウザのJavaScriptコンソールで簡単にテストすることができます。私は私のテストを検証するためにこれをした:

> Number(4) === 4 
< true 

-

このアプローチの繰り返し処理は、元のアレイの上に二回。パフォーマンスが気になる場合は、ソース配列に何万もの項目がある場合、またはテストが非常に高価な場合は、forEachで同じ結果を達成できます。 2つの出力配列(またはreduceのいずれかに、{ numbers: [], items: {}}のようなものを出力する)に追加します。

-

メタ:あなたのタイトルはあまり良くありません。あなたの質問に多少の努力を払わなければ、答えの形で多くの努力をするべきではありません。私たちは皆、私たちのチップトールブリトーの良さからやっています。 ;)

0

Array#forEachで1つのループを使用し、エレメントのタイプに従ってプッシュすることができます。

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

関連する問題