背景
vueでaxios使ってAPI情報取得したときに、使うことが多いかもなーってことで、もっと良い方法がありそうだが、ひとまず、自分用にメモで取っておきます。
vueでAPI叩いたときに、配列内部にオブジェクトを抱えたものが返ってくる前提です。
もっとこのほうがいいなど、あればアドバイスいただければ幸いです。
内容
結論
内容
// axios叩いたときに返って来るdataの文字列
var obj = "data"
var test02 = [
{
"site_no": "00002",
"term_id": "00002",
},
{
"site_no": "00001",
"term_id": "00001",
},
{
"site_no": "00003",
"term_id": "800003",
},
{
"site_no": "00004",
"term_id": "00004",
}
]
// axios叩いたときに返ってくる配列(配列に格納されたオブジェクト一覧が返ってくる前提)
var test08 = [
{
"config":{
"test01": "hoge1"
},
"data": {
"image_url": "http://test01",
"term_id": "800001",
},
"header": {
"aafa": "http://test01",
"gdsa": "800001",
},
"status": 200
},
{
"config":{
"test01": "hoge1"
},
"data": {
"image_url": "http://test03",
"term_id": "800003",
},
"header": {
"aafa": "http://test01",
"gdsa": "800001",
},
"status": 200
},
{
"config":{
"test01": "hoge1"
},
"data": {
"image_url": "http://test02",
"term_id": "800002",
},
"header": {
"aafa": "http://test01",
"gdsa": "800001",
},
"status": 200
}
]
// 比較する配列内部のオブジェクトに一致する文字列があるかを確認し、ある・ないで処理を分ける
// (2つ配列の内部どちらにもオブジェクトがあり、オブジェクト内部の特定文字列が存在することを確認する)
// ある:比較対象側オブジェクト(端末一覧情報オブジェクト)に、要素を追加
// ない:特に処理をせず終了
test08.some((val01)=>{
test02.some((val02) => {
console.log("val01: ", val01)
if(obj !== ""){
if( ( "term_id" in val01[obj] && "term_id" in val02 ) && ( val01[obj]["term_id"] === val02["term_id"] ) ){
// console.log("存在します。")
val02.image_url = val01[obj].image_url
}else{
// console.log("存在しません。")
}
}else{
// オブジェクト内部に、検査したい要素があること確認 && それぞれのオブジェクトで要素が一致すること確認
if( ( "term_id" in val01 && "term_id" in val02 ) && ( val01["term_id"] === val02["term_id"] ) ){
// console.log("存在します。")
// 条件に合致した場合に、片方の配列のオブジェクト要素に代入
val02.image_url = val01.image_url
// 合致したタイミングで処理を抜ける
return true;
}else{
// console.log("存在しません。")
}
}
})
})
console.log("result: ", test02)
結果
result: [
{ site_no: '00002', term_id: '00002' },
{ site_no: '00001', term_id: '00001' },
{ site_no: '00003', term_id: '800003', image_url: 'http://test03' },
{ site_no: '00004', term_id: '00004' }
]