Javascript 检查 object 是否在另一个 object 中并将长度与其他 object 的键匹配
Javascript check if object is in another object and match length to other objects keys
我为标题道歉。由于我还在学习 Javascript.
,所以我不太确定如何最好地表达这一点
我有 object 个出现动态值的日期,如下所示:
(键 = 日期,值 = 数字)
2021-12-23: 4
2021-12-24: 7
2021-12-27: 6
2022-01-05: 5
... etc
我还有另一个 object 看起来像这样:
2022-01-05: 5
基本上,我需要第二个 object 来为所有 non-matching 键填充 0。例如,第二个 object 需要如下所示(匹配值无关紧要):
2021-12-23: 0
2021-12-24: 0
202-12-27: 0
2022-01-05: 5
我真的被这个问题难住了,任何 javascript 帮助将不胜感激。
好的所以你想要做的是循环遍历第一个对象(具有多个 DateString keys/Number 值的对象)的所有键并将新数值设置为 0如果该键不包含在第二个对象中。
根据您的描述:
const firstObject = {
2021-12-23: 4,
2021-12-24: 7,
2021-12-27: 6,
2022-01-05: 5
}
const secondObject = {
2022-01-05: 5
}
似乎这里的代码会受益于 Object.entries
,这是一个你可以 运行 对象 Object.entries(myObject || {})
的函数,它会 return 一个二维的对象的数组 [[key, val], [key, val]]
.
因此您的最终代码将如下所示:
const mapTo0s = (firstObject, secondObject) => {
return Object.fromEntries(Object.entries(firstObject).map(([dateString, value]) => {
if (!secondObject[dateString]) {
return [dateString, 0];
}
return [dateString, value]; // assumes you want to keep the value as is when the secondObject has the value.
}))
};
Object.fromEntries
是另一种 javascript 方法,它将数组的二维数组转换为具有相应键的对象。因此,如果您发送 [['05-10-2021', 3]]
,它将 return {'05-10-2021': 3 }
.
你可以运行这样的功能:
const result = mapTo0s(firstObject, secondObject)
// should result in:
console.log({ result })
/* { result: {
2021-12-23: 0,
2021-12-24: 0,
202-12-27: 0,
2022-01-05: 5
}
}
*/
这是一个使用 Object.entries
和 Array.prototype.reduce
的实现,但实际上有很多方法可以解决这个问题。
const original = {
"2021-12-23": 4,
"2021-12-24": 7,
"2021-12-27": 6,
"2022-01-05": 5
}
function filterObjectByKey( o, key ){
return Object.entries(o).reduce((acc, [k,v])=>{
acc[k] = ( k === key ) ? v : 0;
return acc;
}, {});
}
const filtered = filterObjectByKey( original, "2022-01-05");
console.log( filtered );
更新: 该函数还可以接受辅助对象作为参数并根据其键进行过滤:
const original = {
"2021-12-23": 4,
"2021-12-24": 7,
"2021-12-27": 6,
"2022-01-05": 5
}
const secondary = {
"2022-01-05": 5
}
function filterObjectByKey( o, sec ){
const keys = Object.keys(sec);
return Object.entries(o).reduce((acc, [k,v])=>{
acc[k] = keys.includes(k) ? v : 0;
return acc;
}, {});
}
const filtered = filterObjectByKey( original, secondary );
console.log( filtered );
也许您可以使用某种形式的迭代与合并运算符 (||)...
someObjArray.forEach(function(x) {
return {
// if the obj does not have key/value pair for that date, it will use 0 (the value to the right of ||)
2021-12-23: (x['2021-12-23'] || 0),
2021-12-24: (x['2021-12-24'] || 0),
2021-12-27: (x['2021-12-27'] || 0),
2022-01-05: (x['2021-01-05'] || 0)
}
});
我为标题道歉。由于我还在学习 Javascript.
,所以我不太确定如何最好地表达这一点我有 object 个出现动态值的日期,如下所示: (键 = 日期,值 = 数字)
2021-12-23: 4
2021-12-24: 7
2021-12-27: 6
2022-01-05: 5
... etc
我还有另一个 object 看起来像这样:
2022-01-05: 5
基本上,我需要第二个 object 来为所有 non-matching 键填充 0。例如,第二个 object 需要如下所示(匹配值无关紧要):
2021-12-23: 0
2021-12-24: 0
202-12-27: 0
2022-01-05: 5
我真的被这个问题难住了,任何 javascript 帮助将不胜感激。
好的所以你想要做的是循环遍历第一个对象(具有多个 DateString keys/Number 值的对象)的所有键并将新数值设置为 0如果该键不包含在第二个对象中。
根据您的描述:
const firstObject = {
2021-12-23: 4,
2021-12-24: 7,
2021-12-27: 6,
2022-01-05: 5
}
const secondObject = {
2022-01-05: 5
}
似乎这里的代码会受益于 Object.entries
,这是一个你可以 运行 对象 Object.entries(myObject || {})
的函数,它会 return 一个二维的对象的数组 [[key, val], [key, val]]
.
因此您的最终代码将如下所示:
const mapTo0s = (firstObject, secondObject) => {
return Object.fromEntries(Object.entries(firstObject).map(([dateString, value]) => {
if (!secondObject[dateString]) {
return [dateString, 0];
}
return [dateString, value]; // assumes you want to keep the value as is when the secondObject has the value.
}))
};
Object.fromEntries
是另一种 javascript 方法,它将数组的二维数组转换为具有相应键的对象。因此,如果您发送 [['05-10-2021', 3]]
,它将 return {'05-10-2021': 3 }
.
你可以运行这样的功能:
const result = mapTo0s(firstObject, secondObject)
// should result in:
console.log({ result })
/* { result: {
2021-12-23: 0,
2021-12-24: 0,
202-12-27: 0,
2022-01-05: 5
}
}
*/
这是一个使用 Object.entries
和 Array.prototype.reduce
的实现,但实际上有很多方法可以解决这个问题。
const original = {
"2021-12-23": 4,
"2021-12-24": 7,
"2021-12-27": 6,
"2022-01-05": 5
}
function filterObjectByKey( o, key ){
return Object.entries(o).reduce((acc, [k,v])=>{
acc[k] = ( k === key ) ? v : 0;
return acc;
}, {});
}
const filtered = filterObjectByKey( original, "2022-01-05");
console.log( filtered );
更新: 该函数还可以接受辅助对象作为参数并根据其键进行过滤:
const original = {
"2021-12-23": 4,
"2021-12-24": 7,
"2021-12-27": 6,
"2022-01-05": 5
}
const secondary = {
"2022-01-05": 5
}
function filterObjectByKey( o, sec ){
const keys = Object.keys(sec);
return Object.entries(o).reduce((acc, [k,v])=>{
acc[k] = keys.includes(k) ? v : 0;
return acc;
}, {});
}
const filtered = filterObjectByKey( original, secondary );
console.log( filtered );
也许您可以使用某种形式的迭代与合并运算符 (||)...
someObjArray.forEach(function(x) {
return {
// if the obj does not have key/value pair for that date, it will use 0 (the value to the right of ||)
2021-12-23: (x['2021-12-23'] || 0),
2021-12-24: (x['2021-12-24'] || 0),
2021-12-27: (x['2021-12-27'] || 0),
2022-01-05: (x['2021-01-05'] || 0)
}
});