Отфильтровать вложенный объект и вернуть новый объект - PullRequest
0 голосов
/ 11 июля 2020

У меня есть объект со следующей структурой:

{
  "productName": {
    "de-DE": "Hudson",
    "en-US": "Hudson Wall Cup",
    "fr-FR": "Hudson Wall Cup FR"
  },
  "productDescription": {
    "en-US": "Wall Hanging Glass Flower Vase and Terrarium",
    "it-IT": "Wall Hanging Glass Flower Vase and Terrarium IT"
  },
  "sizetypecolor": {
    "en-US": "3 x 3 x 5 inches; 5.3 ounces"
  },
  "image": {
    "en-US": [
      {
        "sys": {
          "type": "Link",
          "linkType": "Asset",
          "id": "Xc0ny7GWsMEMCeASWO2um"
        }
      }
    ],
    "it-IT": [
      {
        "sys": {
          "type": "Link",
          "linkType": "Asset",
          "id": "Xc0ny7GWsMEMCeASWO2um"
        }
      }
    ]
  },
  "tags": {
    "en-US": ["vase", "flowers", "accessories", "translation"],
    "jp": ["vase", "flowers", "accessories", "translation"]
  },
  "website": {
    "en-US": "http://www.amzon.com/dp/B00E82D7I8/"
  }
}

Каждый элемент (productName, productDescription et c.) Содержит пары ключ-значение, где ключ - это код языка. а значение - это соответствующий текст на этом языке. Я хочу отфильтровать все вложенные пары ключ-значение, которые не имеют ключ "en-US", и, следовательно, вернуть следующий объект:

{
  "productName": {
    "en-US": "Hudson Wall Cup"
  },
  "productDescription": {
    "en-US": "Wall Hanging Glass Flower Vase and Terrarium"
  },
  "sizetypecolor": {
    "en-US": "3 x 3 x 5 inches; 5.3 ounces"
  },
  "image": {
    "en-US": [
      {
        "sys": {
          "type": "Link",
          "linkType": "Asset",
          "id": "Xc0ny7GWsMEMCeASWO2um"
        }
      }
    ]
  },
  "tags": {
    "en-US": ["vase", "flowers", "accessories", "translation"]
  },
  "website": {
    "en-US": "http://www.amzon.com/dp/B00E82D7I8/"
  }
}

Есть много полезных ответы на фильтрацию невложенного объекта, но мне не удалось найти решение, которое применимо к этой вложенной структуре. Как лучше всего отфильтровать ненужные пары "ключ-значение"?

1 Ответ

0 голосов
/ 11 июля 2020

const data = {
    "productName": {
      "de-DE": "Hudson",
      "en-US": "Hudson Wall Cup",
      "fr-FR": "Hudson Wall Cup FR"
    },
    "productDescription": {
      "en-US": "Wall Hanging Glass Flower Vase and Terrarium",
      "it-IT": "Wall Hanging Glass Flower Vase and Terrarium IT"
    },
    "sizetypecolor": {
      "en-US": "3 x 3 x 5 inches; 5.3 ounces"
    },
    "image": {
      "en-US": [
        {
          "sys": {
            "type": "Link",
            "linkType": "Asset",
            "id": "Xc0ny7GWsMEMCeASWO2um"
          }
        }
      ],
      "it-IT": [
        {
          "sys": {
            "type": "Link",
            "linkType": "Asset",
            "id": "Xc0ny7GWsMEMCeASWO2um"
          }
        }
      ]
    },
    "tags": {
      "en-US": ["vase", "flowers", "accessories", "translation"],
      "jp": ["vase", "flowers", "accessories", "translation"]
    },
    "website": {
      "en-US": "http://www.amzon.com/dp/B00E82D7I8/"
    }
  }

function filter(object) {
    return Object.entries(object).reduce((filtered, [key,val]) => {
        if(typeof val === "object" && !Array.isArray(val)) filtered[key] = filter(val);
        if(key === "en-US") filtered[key] = val; 
        return filtered;      
    },{})
}

console.log(filter(data))
...