为每个属性创建一个对象[关闭]

问题描述 投票:0回答:2

我有一个对象

const data = {
  "name-uz": "name uz",
  "desc-uz": "<p>desc uz</p>\r\n",
  "name-en": "name en",
  "desc-en": "<p>desc en</p>\r\n",
  days: "5",
  price: "2000",
  extra_price: "1000",
};

我想做这件事:

{
  name: {
    uz: "name-uz",
    en: "name-en"
  }
  desc: {
    uz: "desc-uz",
    en: "desc-en"
  }
}

我怎样才能实现这个目标?

我不知道该怎么办...

javascript node.js typescript express lodash
2个回答
-1
投票

这是我能想到的最短的。

我假设您有两种语言的名称和描述,而不仅仅是名称 uz 和 desc uz

const stripHTML = (html) => {
  const temp = document.createElement("div");
  temp.innerHTML = html;
  return temp.textContent?.trim() ?? "";
};

const newData = {};

Object.keys(data).forEach((key) => {
  const [type, lang] = key.split("-");
  if (lang) {
    newData[type] ??= {};
    newData[type][lang] = type.startsWith("desc") ? stripHTML(data[key]) : data[key];
  }
});

console.log(newData);
<script>
const data = {
  "name-uz": "name uz",
  "desc-uz": "<p>Tez jigarli tilov terishib, bu bo'ri yuguradi.</p>\r\n",
  "name-en": "name en",
  "desc-en": "<p>The quick brown fox jumps over the lazy dog.</p>\r\n",
  days: "5",
  price: "2000",
  extra_price: "1000",
};
</script>


-2
投票

使用

Object.keys
迭代对象属性

使用

String.prototype.split
分割字符串

const data = {
  "name-uz": "name uz",
  "desc-uz": "<p>desc uz</p>\r\n",
  "name-en": "name en",
  "desc-en": "<p>desc en</p>\r\n",
  days: "5",
  price: "2000",
  extra_price: "1000",
};

const obj = {}

for (const key of Object.keys(data)) {
  if (!key.includes('-')) continue
  const [part1, part2] = key.split('-')
  if (!(part1 in obj)) obj[part1] = {}
  obj[part1][part2] = key
}

console.log(obj)

© www.soinside.com 2019 - 2024. All rights reserved.