重新排列javascript对象结构

我想重新排列一个物体的结构,我从昨天开始就卡住了,所以我需要你的重要帮助。


目前,结构如下:


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"

}

}]

欢迎任何推荐,提前感谢社区!


UYOU
浏览 143回答 2
2回答

www说

您的目标数据模型似乎有点不理想,因为您有一个具有唯一 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;}, []))

catspeake

您可以解构属性并稍后使用哈希表中的值。主要部分是获取具有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; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript