javascript - 比较两组对象并使用 javascript 创建新组并形成 jsx
问题描述
嗨,我是反应和 javascript 的新手
我有两组对象
设置1
const set1 = {
men: { value: "men", label: "Men", type: "select" },
women: { value: "women", label: "Women", type: "select" },
kids: { value: "kids", label: "Kids", type: "select" },
};
和set2
const set2 = {
men: { code: "men", title: "Men" },
women: { code: "men", title: "Men" },
};
我想比较这两个对象集,如果键相同,我想将结果作为新对象
const resultobj = {
men: { value: "men", label: "Men", type: "select" },
women: { value: "women", label: "Women", type: "select" },
};
我想使用 jsx exmaple 在 div 中显示来自结果 obj 的标签
return <div>{resultobj.label}</div>;
解决方案
请尝试以下示例
const set1 = {
men: { value: "men", label: "Men", type: "select" },
women: { value: "women", label: "Women", type: "select" },
kids: { value: "kids", label: "Kids", type: "select" },
};
const set2 = {
men: { code: "men", title: "Men" },
women: { code: "men", title: "Men" },
};
// get keys of both arrays
const array1 = Object.keys(set1);
const array2 = Object.keys(set2);
// get interesction
const diff = array1.filter((entry) => array2.includes(entry));
// reduce to result object
const output = diff.reduce((previousValue, currentValue) => {
previousValue[currentValue] = set1[currentValue];
return previousValue;
}, {});
console.log(output);
更新 0
因为您可以有 1 个或多个结果,所以您必须列出它们,例如
return (
<ul>
{output.map(entry => <li>{entry.label}</li>)}
</ul>
)
更新 1
您显示的数据格式不正确,请尝试以下操作
const data1 = {
women: {
value: "women",
label: "Women",
type: "select",
options: {
1: {
label: "lady",
value_string: "1",
},
2: {
label: "girl",
value_string: "2",
},
},
},
};
for (const key in data1.women.options) {
console.log(data1.women.options[key].label);
}
我了解您可以获得多个数据,如果是这种情况,您可以尝试以下方法
const data2 = {
women: {
value: "women",
label: "Women",
type: "select",
options: {
1: {
label: "lady",
value_string: "1",
},
2: {
label: "girl",
value_string: "2",
},
},
},
men: {
value: "women",
label: "Women",
type: "select",
options: {
1: {
label: "lady",
value_string: "1",
},
2: {
label: "girl",
value_string: "2",
},
},
},
};
for (const property in data2) {
for (const key in data2[property].options) {
console.log(data2[property].options[key].label);
}
}
现在,要在 react 中渲染,您需要使用 map,为此您可以将每个对象传递给一个数组,然后您将在其中使用 map,请参见以下示例
按照第二个例子的逻辑
let output1 = [];
for (const property in data2) {
for (const key in data2[property].options) {
output1 = [...output1, data2[property].options[key]];
}
}
return (
<ul>
output1.map(entry => <li>{entry.label}</li>)
</ul>
)
看
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
这是一个非常常见的场景,我建议您继续参考这个答案https://stackoverflow.com/a/33034768/615274
推荐阅读
- regex - /(?<=.*)(\w\w)(?=.*)/ 没有给出我所期望的
- c# - 将事件从 UserControl 传递到父窗体
- c# - 在 Dotnet 5 中反序列化 2.6k 行 XML
- c++ - 如何使用 ESP Now 在两个 ESP32 MCU 之间发送音频数据包?
- javascript - 如何恢复显示 [[PromiseResult]]: undefined 的承诺的价值?
- apache - Apache .htaccess 将不存在的文件映射到脚本
- javascript - Asp.Net Core MVC Google Maps api Plot Ployline from SQL
- r - 根据数据集列中的名称设置条件
- kotlin - Kotlin 中的函数式编程,Manning 书 - 二叉树结构
- pandas - Pandas DataFrame 中的 spark.createDataFrame 仅复制标头