如何将 object 属性 值与数组值进行比较,然后将 object 值替换为数组值?

How do I compare an object property values to the values of an array, and then replace the object values with the array values?

假设我有一个像这样的数组(我添加随机字母只是为了更好地重新创建我的示例)。

arr1 = ["appless", "bananarr", "orangeaa", "coconutvv", "pineapplevv"]

那我有一组object

const objects: [{
name: "john", 
job: "carpenter",
color: "blue"
status: "banana"},

{
name: "john", 
job: "plumber",
favorites: "banana", "apple", "orange",
color: "blue", "purple"},

{
name: "john", 
job: "carpenter",
favorites: "orange", "pineapple",
gender: "female"}]

如您所见,我的 object 具有不同的属性,但是很多值与我的 arr1 中的一个或多个值匹配。 现在,对于每个与我的 arr1 中的字符串之一最匹配的值,我想将 arr1 中匹配值的索引替换为 object 值(如下所示),对于每个 object 和每 属性.

示例结果:

const objects: [{
name: "john", 
job: "carpenter",
color: "blue"
status: 1},

{
name: "john", 
job: "plumber",
favorites: 1, 0, 2,
color: "blue", "purple"},

{
name: "john", 
job: "carpenter",
gender: "female", 2}]

我实际上想做的是动态替换投资组合项目中 libraries/technologies/frameworks/etc(即“React”)的字符串值(object 是从本地获取的json) 及其各自的图标(为此我使用的是 React 图标)。我不想直接编辑 json。

我将我需要的所有图标组件放在一个数组中,然后我用它来制作一个副本数组,其中包含这些图标组件的“字符串”值 (array.map)。

要获取索引:我认为最好逐一尝试匹配 arr1(本例中为“收藏夹”、“状态”和“性别”),例如 objects.map(object=>{object.favorites.includes("orangeaa").indexOf()} ??

并非所有 object 都有“收藏夹”属性,因此我会得到一些未定义的结果... 一旦我设法获得该索引号,我将使用它来呈现实际的图标。 由于我使用的是 React,所以它会是这样的:

{object.favorites && (<div>
<h3>Favs:</h3>{object.favorites.map(i=><p key={i}>{iconComponentsArray[i]}</p>)}

您可以将收藏夹映射到目标数组的索引。

function getIndices(values, targets) {
    return values.map(s => targets.findIndex(t => t.includes(s)));
}

console.log(getIndices(
    ["banana", "apple", "orange"],
    ["appless", "bananarr", "orangeaa", "coconutvv", "pineapplevv"]
));