鍍金池/ 問答/HTML/ 出入?yún)?shù)組不一樣,需要算法改變,一一對應

出入?yún)?shù)組不一樣,需要算法改變,一一對應

是這樣的 ,我這邊有個數(shù)組,入?yún)⒌臅r候fileId 是 比如 [8465478213456,1234567897942,8745648975142]這樣,進入后端一個接口,返回的是帶一個上傳地址的數(shù)組,里面分別有幾個對象,如[{fileId: 1234567897942, url:''}, {fileId: 8745648975142, url}, {fileId: 8465478213456, url:}]

也就是說,返回的fileId 的順序出入?yún)⒉煌绊懳液罄m(xù)的遍歷過程,有算法可以調(diào)整出參后的順序嗎:
代碼如下 ,可以使用es6

getS3Sign(userId(), idArr).then(res => {

      let data1 = JSON.parse(res.data.data)
      console.log(data1)  )}
      
   idArr 就是第一個數(shù)組,data1就是第二個數(shù)組
回答
編輯回答
舊言

idArr 是不是有序排列,如果是話,排一下序就好了

let objArr = [
  {
    id:1,
    url: 'aaaa'
  },
  {
    id:3,
    url: 'bbb'
  },{
    id:5,
    url: 'ccc'
  },{
    id:2,
    url: 'ddd'
  }
]

let sortArr = objArr.sort((x,y)=>{
  return x.id>y.id
})

console.log(sortArr)

如果,不是有序排列,一定要按照原有排序的話,可以用以下

let objArr = [
  {
    id:1,
    url: 'aaaa'
  },
  {
    id:3,
    url: 'bbb'
  },{
    id:5,
    url: 'ccc'
  },{
    id:2,
    url: 'ddd'
  }
]


let arr = [2,3,5,1]
let res = arr.map((x)=>{
  console.log(x)
  return objArr.find((i)=>{
    return i.id === x
  })
})

console.log(res)
2018年9月3日 17:12
編輯回答
絯孑氣

利用sort排序

var data1 = [{fileId: 3, url:'3'}, {fileId: 1, url:'1'}, {fileId: 2, url:'2'}];
data1.sort(function(a,b){return a.fileId - b.fileId})
data1;// [{fileId: 1, url:'1'}, {fileId: 2, url:'2'}, {fileId: 3, url:'3'}];
2017年4月22日 13:07
編輯回答
久不遇

接口返回的數(shù)組根據(jù)fileId進行排序不就可以了?

res_data.sort((item_a, item_b) => {
    return item_a.fileId - item_b.fileId;
})
2018年6月25日 13:32
編輯回答
氕氘氚
let list =  [1,2,3];
let buffer = [
  {
    fileId : 3,
    url : ''
  },{
    fileId : 1,
    url : ''
  },{
    fileId : 2,
    url : ''
  }
]

let result = [];
for(let i of list){
  for(let j of buffer){
    if(i == j.fileId){
      result.push(j);
    }
  }
}
console.log(result);
2018年5月4日 04:35
編輯回答
陌離殤
const url = "";


const keys = [8465478213456, 1234567897942, 8745648975142];
const result = [
    { fileId: 1234567897942, url },
    { fileId: 8745648975142, url },
    { fileId: 8465478213456, url }
];

const data = keys.map(key => result.find(m => m.fileId === key));

console.log(data);
[ { fileId: 8465478213456, url: '' },
  { fileId: 1234567897942, url: '' },
  { fileId: 8745648975142, url: '' } ]
2018年4月13日 20:00
編輯回答
清夢
let params = [1,2,3];
let result = [{fileId: 3, url:'url3'}, {fileId: 1, url: 'url1'}, {fileId: 2, url:'url2'}];
let arr = params.map(fileId => {
    let sortedObj;
    result.forEach(resObj => {
        if (resObj.fileId === fileId) {
            sortedObj = resObj;
        }
    });
    return sortedObj;
});
console.log(arr);

這樣可以嗎,不過如果是我的話,我肯定去找后端給我排 呵呵

2018年1月29日 09:46