为了账号安全,请及时绑定邮箱和手机立即绑定

重新排列javascript对象结构

重新排列javascript对象结构

UYOU 2021-11-12 18:21:05
我想重新排列一个物体的结构,我从昨天开始就卡住了,所以我需要你的重要帮助。目前,结构如下:var data = [{    id: 14,    language: "english",    title: "I am a new article",    bodyText: "Article Content",    lang: "eng",    keywords: ["key1", "key2"]  },  {    id: 1,    language: "greeks",    title: "Ειμαι ενα καινουρειο αρθρο",    bodyText: "Κυριο μερος Αρθρου",    lang: "gr",    keywords: ["key1", "key2"]  },  {    id: 1,    language: "espanol",    title: "Soy un nuevo articulo",    bodyText: "Soy un nuevo articulo",    lang: "es",    keywords: ["key1", "key2"]  },]我想将结构重新排列为以下格式:var data = [{  id: 1,  language: {    es: {      title: "Spanish Article",      bodyText: "Content in Spanish"    },    gr: {      title: "Greek Article",      bodyText: "Content in Grecce"    }  },  id: 2,  language: {    en: {      title: "English Article",      bodyText: "Content in English"    }  }}];我编写了以下代码来完成任务,但没有运气。var arr = [];let result = data.reduce(function(c, v) {  console.log(v.id);  /*   console.log(c);   */  c[v.id] = c[v.id] || {};  c[v.id][v.lang] = c[v.id][v.lang] || {    title: v.title,    bodyText: v.bodyText,    keywords: v.keywords  };  arr.push(c)  return c;}, {});console.log(arr);我得到一个如下所示的对象:[{id:1,es:{title:"Spanish Article",bodyText:"Content in Spanish"},gr:{title:"Greek Article",bodyText:"Content in Grecce"},id:2,en:{title:"English Article",bodyText:"Content in English"}}]欢迎任何推荐,提前感谢社区!
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

您的目标数据模型似乎有点不理想,因为您有一个具有唯一 id 的数组,作为以 id 作为键的对象,它的性能可能更高,但您也可以使用数据模型:


var data = [

  {

    id: 14,

    language: "english",

    title: "I am a new article",

    bodyText: "Article Content",

    lang: "eng",

    keywords: ["key1", "key2"]

  },

  {

    id: 1,

    language: "greeks",

    title: "Ειμαι ενα καινουρειο αρθρο",

    bodyText: "Κυριο μερος Αρθρου",

    lang: "gr",

    keywords: ["key1", "key2"]

  },

  {

    id: 1,

    language: "espanol",

    title: "Soy un nuevo articulo",

    bodyText: "Soy un nuevo articulo",

    lang: "es",

    keywords: ["key1", "key2"]

  }

];

  

console.log(data.reduce(function(result, entry) {

  var id_index = result.map(function(e) { return e.id; }).indexOf(entry.id);

  var id_element;

  

  if (id_index === -1) {

    id_element = {id: entry.id, language: {}};

  } else {

    id_element = result[id_index];

  }

  

  id_element.language[entry.lang] = {

    title: entry.title,

    bodyText: entry.bodyText

  };

  

  if (id_index === -1) {

    result.push(id_element);

  }

  

  return result;

}, []))


查看完整回答
反对 回复 2021-11-12
?
catspeake

TA贡献1111条经验 获得超0个赞

您可以解构属性并稍后使用哈希表中的值。


主要部分是获取具有language属性的初始对象。


var data = [{ id: 14, language: "english", title: "I am a new article", bodyText: "Article Content", lang: "eng", keywords: ["key1", "key2"] }, { id: 1, language: "greeks", title: "Ειμαι ενα καινουρειο αρθρο", bodyText: "Κυριο μερος Αρθρου", lang: "gr", keywords: ["key1", "key2"] }, { id: 1, language: "espanol", title: "Soy un nuevo articulo", bodyText: "Soy un nuevo articulo",     lang: "es", keywords: ["key1", "key2"] }],

    result = data.reduce((c, { id, lang, title, bodyText, keywords }) => {

        c[id] = c[id] || { id, language: {} };

        c[id].language[lang] = { title, bodyText, keywords };

        return c;

    }, {}),

    array = Object.values(result);


console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信