javascript - 如何组合两个键名称不同但对应值相同的对象数组?

标签 javascript jquery ecmascript-6

const cafes = [
  {
    name: "Bazaar Cafe",
    place_id: "kjk234g4gcvfx8usg1l33pi",
  },
  {
    name: "Ashley's Cafe",
    place_id: "12hydbdf76sljfts87sbfis",
  },
  {
    name: "Avenue Cafe",
    place_id: "skjd86svvfdrsv55svbvf3f",
  },
  {
    name: "Hi-Lo Cafe",
    place_id: "mjdhgetr4pojfyts22fzfsh",
  },
  {
    name: "California Chicken Cafe",
    place_id: "12hydbdf76sljfts87sbfis",
  },
  {
    name: "Avenue Bakery Cafe",
    place_id: "jahgde7wgdiau8ewsahgosd",
  },
  {
    name: "Philz Coffee",
    place_id: "urhw3837ehalod7w02b7835",
  },
];

const places = [
  {
    id: "jahgde7wgdiau8ewsahgosd",
    street_no: "60H",
    locality: "Solomos Island Road",
    postal_code: "20688",
    lat: "36.7783 N",
    long: "119.4179 W",
  },
  {
    id: "12hydbdf76sljfts87sbfis",
    street_no: "1B",
    locality: "Macarthur Blvd",
    postal_code: "20619",
    lat: "38.1781 N",
    long: "118.4171 W",
  },
  {
    id: "kjk234g4gcvfx8usg1l33pi",
    street_no: "45250",
    locality: "Worth Avenue, Unit A",
    postal_code: "20619",
    lat: "36.1152",
    long: "117.521",
  },
  {
    id: "saswe3s6yydtdr52hsd72yst",
    street_no: "1X",
    locality: "Macarthur Blvd",
    postal_code: "20687",
    lat: "36.7783",
    long: "119.4179",
  },
  {
    id: "skjd86svvfdrsv55svbvf3f",
    street_no: "7S",
    locality: "Three Notch Road",
    postal_code: "20619",
    lat: "36.83",
    long: "119.6",
  },
  {
    id: "mjdhgetr4pojfyts22fzfsh",
    street_no: "22803",
    locality: "Gunston Dr Lexington Park",
    postal_code: "20688",
    lat: "35.7788",
    long: "119.979",
  },
  {
    id: "urhw3837ehalod7w02b7835",
    street_no: "225",
    locality: "Macarthur Blvd",
    postal_code: "20687",
    lat: "35.77813",
    long: "119.41791",
  },
];

我希望最终的组合数组如下 -

finalArr = [
  {
    id: "kjk234g4gcvfx8usg1l33pi",
    street_no: "45250",
    locality: "Worth Avenue, Unit A",
    postal_code: "20619",
    lat: "36.1152",
    long: "117.521",
    name: "Bazaar Cafe"
  },
  {
    id: "12hydbdf76sljfts87sbfis",
    street_no: "1B",
    locality: "Macarthur Blvd",
    postal_code: "20619",
    lat: "38.1781 N",
    long: "118.4171 W",
    name: "Ashley's Cafe"
  },
  {
    id: "12hydbdf76sljfts87sbfis",
    street_no: "1B",
    locality: "Macarthur Blvd",
    postal_code: "20619",
    lat: "38.1781 N",
    long: "118.4171 W",
    name: "California Chicken Cafe"
  },
  {
    id: "skjd86svvfdrsv55svbvf3f",
    street_no: "7S",
    locality: "Three Notch Road",
    postal_code: "20619",
    lat: "36.83",
    long: "119.6",
    name: "Avenue Cafe"
  },
  {
    id: "mjdhgetr4pojfyts22fzfsh",
    street_no: "22803",
    locality: "Gunston Dr Lexington Park",
    postal_code: "20688",
    lat: "35.7788",
    long: "119.979",
    name: "Hi-Lo Cafe"
  },
  {
    id: "jahgde7wgdiau8ewsahgosd",
    street_no: "60H",
    locality: "Solomos Island Road",
    postal_code: "20688",
    lat: "36.7783 N",
    long: "119.4179 W",
    name: "Avenue Bakery Cafe"
  }, 
  {
    id: "urhw3837ehalod7w02b7835",
    street_no: "225",
    locality: "Macarthur Blvd",
    postal_code: "20687",
    lat: "35.77813",
    long: "119.41791",
    name: "Philz Coffee"
  }
];

我尝试像这样实现它,但只获取最终数组的最后一个对象 -

function combineById (cafes, places) {
  const finalArr = [];
  const wholeObj = {};
  const set = new Set();

  for (const cafe of cafes) { 
    let cafeId = cafe.place_id;
    let cafeName = cafe.name;
    for (const place of places) {
      if (cafeId === place.id && !set.has(cafeId)) {
        set.add(cafeId);
        wholeObj.id = place.id;
        wholeObj.streetNo = place.street_no;
        wholeObj.locality = place.locality;
        wholeObj.postalCode = place.postal_code;
        wholeObj.lat = place.lat;
        wholeObj.long = place.long;
        wholeObj.name = cafeName;
      }
    }
    finalArr.push(wholeObj);
  }
  return finalArr;
}

const resultArr = combineById(cafes, places);
console.log(resultArr);

我正在尝试实现一个搜索函数,该函数将接受两个参数,即最终数组和搜索项。到目前为止,搜索功能在 cafes 数组上运行良好,但我很难组合 placescafes 数组,combineById 函数仅返回最终数组的最后组合对象结果。我想要最终数组中的所有对象组合,以便稍后我可以直接调用最终数组进行进一步操作。 请帮我找出解决方案。 谢谢。

最佳答案

const cafes = [
  {
    name: "Bazaar Cafe",
    place_id: "kjk234g4gcvfx8usg1l33pi",
  },
  {
    name: "Ashley's Cafe",
    place_id: "12hydbdf76sljfts87sbfis",
  },
  {
    name: "Avenue Cafe",
    place_id: "skjd86svvfdrsv55svbvf3f",
  },
  {
    name: "Hi-Lo Cafe",
    place_id: "mjdhgetr4pojfyts22fzfsh",
  },
  {
    name: "California Chicken Cafe",
    place_id: "12hydbdf76sljfts87sbfis",
  },
  {
    name: "Avenue Bakery Cafe",
    place_id: "jahgde7wgdiau8ewsahgosd",
  },
  {
    name: "Philz Coffee",
    place_id: "urhw3837ehalod7w02b7835",
  },
];

const places = [
  {
    id: "jahgde7wgdiau8ewsahgosd",
    street_no: "60H",
    locality: "Solomos Island Road",
    postal_code: "20688",
    lat: "36.7783 N",
    long: "119.4179 W",
  },
  {
    id: "12hydbdf76sljfts87sbfis",
    street_no: "1B",
    locality: "Macarthur Blvd",
    postal_code: "20619",
    lat: "38.1781 N",
    long: "118.4171 W",
  },
  {
    id: "kjk234g4gcvfx8usg1l33pi",
    street_no: "45250",
    locality: "Worth Avenue, Unit A",
    postal_code: "20619",
    lat: "36.1152",
    long: "117.521",
  },
  {
    id: "saswe3s6yydtdr52hsd72yst",
    street_no: "1X",
    locality: "Macarthur Blvd",
    postal_code: "20687",
    lat: "36.7783",
    long: "119.4179",
  },
  {
    id: "skjd86svvfdrsv55svbvf3f",
    street_no: "7S",
    locality: "Three Notch Road",
    postal_code: "20619",
    lat: "36.83",
    long: "119.6",
  },
  {
    id: "mjdhgetr4pojfyts22fzfsh",
    street_no: "22803",
    locality: "Gunston Dr Lexington Park",
    postal_code: "20688",
    lat: "35.7788",
    long: "119.979",
  },
  {
    id: "urhw3837ehalod7w02b7835",
    street_no: "225",
    locality: "Macarthur Blvd",
    postal_code: "20687",
    lat: "35.77813",
    long: "119.41791",
  },
];

let transformed = places.reduce((result,place)=>{
  let cafe = cafes.find(c=>c.place_id===place.id);
  cafe && result.push({...place,name: cafe.name});
  return result;
},[]);

console.log(JSON.stringify(transformed, null,2));

关于javascript - 如何组合两个键名称不同但对应值相同的对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61685157/

相关文章:

javascript - 如何使下拉菜单出现在幻灯片上?

javascript - 单选按钮更改为非初始状态未注册

jquery - 如何使用 google webfontloader 调用 jquery 事件

javascript - jquery点击不同的div并改变颜色并重置另一个div的颜色

javascript - 用于测试 Javascript 的 Selenium 替换工具

javascript - 如何使用 es2015 模块打包库

javascript - 返回 Javascript Number 的原始值

javascript - 聊天框总是滚动到底部到最后一行聊天

javascript - 如何在有条件的情况下在另一个组件正下方的无状态组件上呈现函数?

javascript - 生成器和设置值/完成产量