js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

Map场景题

Open Sunny-117 opened this issue 3 years ago • 10 comments

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

arr = [
    {
        name: "可乐",
        categories: ["热门", "饮料"],
    },
    {
        name: "苹果",
        categories: ["热门", "食物"],
    },
    {
        name: "洗衣液",
        categories: ["生活用品"],
    },
];

// [
//     { name: "热门", categories: ["可乐", "苹果"] },
//     { name: "饮料", categories: ["可乐"] },
//     { name: "食物", categories: ["苹果"] },
//     { name: "生活用品", categories: ["洗衣液"] },
// ];

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

function changeFormat(arr){
  let res = [];
  let map = new Map();
  arr.forEach(item => {
    let categories = item.categories;
    categories.map(keyWord => {
      if(!map.has(keyWord)){
        map.set(keyWord, [item.name]);
      }else{
        map.get(keyWord).push(item.name);
      }
    })
  })
  map.forEach((val, key) => {
    res.push({ name: key, categories: val})
  })
  return res;
}
console.log(changeFormat(arr))

mengqiuleo avatar Jan 19 '23 18:01 mengqiuleo

const arrs = [
  {
    name: "可乐",
    categories: ["热门", "饮料"],
  },
  {
    name: "苹果",
    categories: ["热门", "食物"],
  },
  {
    name: "洗衣液",
    categories: ["生活用品"],
  },
];
let map = new Map();
const res = [];
for (const arr of arrs) {
  const { name, categories } = arr;
  for (const category of categories) {
    if (!map.has(category)) map.set(category, [name]);
    else {
      let val = map.get(category);
      val.push(name);
      map.set(category, val);
    }
  }
}
map.forEach((key, val) => {
  res.push({ name: val, categories: key });
});
console.log(res);

bearki99 avatar Feb 12 '23 11:02 bearki99


function process(arr) {
    if (!Array.isArray(arr)) return;
    let map = new Map();
    let res = [];
    arr.forEach(item => {
        const categories = item.categories;
        categories.map((category) => {
            if (!map.has(category)) {
                map.set(category, [].concat(item.name))
            } else {
                map.get(category).push(item.name)
            }
        })
    })
    map.forEach((value, key) => {
        res.push({ name: key, categories: value })
    })
    return res;
}
console.log(process(arr));

LifeIsTerrible avatar Feb 27 '23 14:02 LifeIsTerrible

const map = new Map();
let res2 = [];
for({name, categories} of arr){
    for(let i = 0; i < categories.length; ++i){
        const val = categories[i]
        map.has(val) ? map.get(val).push(name) : map.set(val, [name]);
    }
}

for (const [name, categories] of map) {
    res2.push({name, categories});
}

veneno-o avatar Mar 09 '23 16:03 veneno-o

let arr = [ { name: '可乐', categories: ['热门', '饮料'], }, { name: '苹果', categories: ['热门', '食物'], }, { name: '洗衣液', categories: ['生活用品'], }, ] function changeFormat(arr) { let map = new Map() for (let i = 0; i < arr.length; i++) { arr[i].categories.forEach((val, key) => { let a = map.get(val) a ? a.push(arr[i].name) : (a = [arr[i].name]) map.set(val, a) }) } let newArr = [] map.forEach((val, key) => { newArr.push({ name: key, categories: val }) }) return newArr }

cscty avatar Jul 06 '23 02:07 cscty

function convey(data) {
  let map = new Map()
    for (let item of data) {
      for (let cate of item.categories) {
        if (!map.has(cate)) {
          map.set(cate, {
            name: cate,
            categories: [item.name]
          })
        } else {
          map.get(cate).categories.push(item.name)
        }
      }
    }
    return [...map.values()]
}

QdabuliuQ avatar Jul 15 '23 13:07 QdabuliuQ

Array.from(new Set(arr.map(item => item.categories).flat())).map(item => ({ name: item, categories: arr.filter(it => it.categories.includes(item)).map(i => i.name) }))

kevfeng01 avatar Aug 20 '24 07:08 kevfeng01

let map = new Map();

arr.forEach((key, index) => {
  let { name, categories } = key;
  categories.forEach((e) => {
    if (map.has(e)) {
      map.get(e).push(name);
    } else {
      map.set(e, [name]);
    }
  });
});
console.log(Array.from(map));

dizao006 avatar Oct 07 '24 08:10 dizao006

const arrs = [
  {
    name: "可乐",
    categories: ["热门", "饮料"],
  },
  {
    name: "苹果",
    categories: ["热门", "食物"],
  },
  {
    name: "洗衣液",
    categories: ["生活用品"],
  },
];

const transform = (arrs) => {
  let map = {};
  let _arr = [];
  for(var i = 0; i < arrs.length; i++) {
    const {name, categories} = arrs[i];
    categories.forEach(element => {
      if(map[element]) {
        map[element].push(name);
      } else {
        map[element] = [name];
      }
    });
  }
  Object.keys(map).forEach(item => {
    _arr.push({name: item, categories: map[item]})
  })
  return _arr;
}

console.log(transform(arrs));

Windseek avatar Nov 15 '24 09:11 Windseek