Javascript 如何通过更改对象键名称来修改对象数组响应

Javascript 如何通过更改对象键名称来修改对象数组响应,javascript,callback,Javascript,Callback,对于下面的例子,source是一个函数,它的第二个参数是response,response也是一个回调函数,如果$.getJSON请求成功,则会执行该回调函数,从而在假定/devices端点以正确的格式提供数据的情况下正确执行 $( "#devices" ).autocomplete({ source: function(request, response) { $.getJSON("/devices", { id: 123, term: request.term },

对于下面的例子,source是一个函数,它的第二个参数是response,response也是一个回调函数,如果$.getJSON请求成功,则会执行该回调函数,从而在假定/devices端点以正确的格式提供数据的情况下正确执行

$( "#devices" ).autocomplete({
    source: function(request, response) {
        $.getJSON("/devices", { id: 123, term: request.term }, response);
    }
});
/devices路由将返回类似[{id:321,name:'The first name'},…]的内容,但是格式不正确

$( "#devices" ).autocomplete({
    source: function(request, response) {
        $.getJSON("/devices", { id: 123, term: request.term }, response);
    }
});

我如何修改它,以便将接收到的数据对象键从名称更改为值,从而使源为[{id:321,value:'the name'},…]?

我想您可以使用array.forEach循环响应数组

response.forEach(e => {
  e.value = e.name;
  delete e.name;
});

您可以将回调更改为自己的函数,该函数将修改检索到的数据的格式,然后使用修改后的数据调用响应:

$("#devices").autocomplete({
  source: function(request, response) {
    $.getJSON("/devices", {id: 123, term: request.term}, function(data) {
      const new_data = data.map(({name: value, ...r}) => ({value, ...r}));
      response(new_data);   
    });
  }
});

上面,.map使用并将其重命名为value来提取name属性。…r使用和从原始对象提取剩余的键/值。因此r是一个对象,它包含给定元素的name属性以外的所有内容。然后,该函数返回一个新对象,用于将值设置为键,其内容为实际值,并与对象的其余部分合并,因此…r用于将对象r的键/值分散/合并到新创建的键/值中-其行为类似于对象。assign

,我正沿着这条路走,但没有用修改过的数据做最后的呼叫响应,也没有使用。。。。偏离主题,但请您解释一下.map是如何工作的,重点是。。。你在干什么?@user1032531别担心。我已经更新了我的答案,加入了关于.map如何工作的解释。我目前在手机上,所以当我可以访问桌面时,我可能会编辑它以使其清晰