如何将 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"]
));
假设我有一个像这样的数组(我添加随机字母只是为了更好地重新创建我的示例)。
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"]
));