は私が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}]
を。
アレイの内容をどのように分けることができますか?
は私が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}]
を。
アレイの内容をどのように分けることができますか?
{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);
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);
の下にあなたがソース配列をフィルタするようにあなたは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: {}}
のようなものを出力する)に追加します。
-
メタ:あなたのタイトルはあまり良くありません。あなたの質問に多少の努力を払わなければ、答えの形で多くの努力をするべきではありません。私たちは皆、私たちのチップトールブリトーの良さからやっています。 ;)
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);
あなたはよりよいタイトルを持っている必要があり、あなたが何かをしようとしたのですか? –