だから私は、常に次の形式を持つオブジェクトを取得します。配列の中で、forriptをチェックする方法は?
student: {
"student_id": "12345",
"location": "below",
},
]
},
]
はありがとうと答えを受け入れ、upvoteう!トリックを行う必要があり、このような
だから私は、常に次の形式を持つオブジェクトを取得します。配列の中で、forriptをチェックする方法は?
student: {
"student_id": "12345",
"location": "below",
},
]
},
]
はありがとうと答えを受け入れ、upvoteう!トリックを行う必要があり、このような
何か:次のように
var students = [];
function addStudent(student) {
// Check if we already know about this student.
var existingRecord = students.find(function (s) {
return s.student_id === student.student_id;
});
var classInfo = {
class_number: student.class_number,
location: student.location
};
if (!existingRecord) {
// This is the first record for this student so we construct
// the complete record and add it.
students.push({
student_id: student.student_id,
classes: [classInfo]
});
return;
}
// Add to the existing student's classes.
existingRecord.classes.push(classInfo);
}
あなたはそれを呼び出します:here利用可能
addStudent({
"student_id": "67890",
"class_number": "abcd",
"location": "below",
});
RunnableをJSBin例。
Array.prototype.find
at MDNでさらに利用可能です。
この問題は、student_id
によるインデックス付けを使用して解決できます。たとえば:
var sourceArray = [{...}, {...}, ...];
var result = {};
sourceArray.forEach(function(student){
var classInfo = {
class_number: student.class_number,
location : student.location
};
if(result[student.student_id]){
result[student.student_id].classes.push(classInfo);
} else {
result[student.student_id] = {
student_id : student.student_id,
classes : [classInfo]
}
}
});
// Strip keys: convert to plain array
var resultArray = [];
for (key in result) {
resultArray.push(result[key]);
}
あなたはstudent_id
またはプレーンアレーresultArray
でインデックス付けするオブジェクトが含まれてもresult
形式を使用することができます。
以前の回答が機能しました。関係なくあなたのupvoted;) –
ありがとう。はい、以前の答えが動作しますが、find()のようなメソッドを使用しないため、コードが高速になります。これは、大規模な配列にとって特に重要です。 – IStranger
'student'オブジェクトを1つ追加するだけで正常に追加できましたが、' student_id'という2つの 'student'オブジェクトを追加しようとすると、最初の' classInfo'オブジェクトが正しく追加されました2番目の 'classInfo'オブジェクトが正しい場所に追加されましたが、' student_id'も追加されました。問題の原因はどこですか?私はログテストを試みましたが、それを見つけることができませんでした。おかげさまで再びjabclab –
前のコメントは無視してください。私の終わりに間違いだった。どうもありがとうございます!答えを受け入れ、upvoted。しかし、学習目的のために、 'students.find(function(s))'は何をしていますか? –
@JoKo助けてくれてうれしいです:-) 'Array.prototype.find'の詳細はhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/findで読むことができます。 – jabclab