繁体   English   中英

从键不在数组中的 object 中删除条目

[英]Remove entries from an object where the keys aren't in an array

我正在尝试从 object 中删除条目,以便它仅包含数组中的条目。 所以我有一个required的数组:

const required = ['accountNumber', 'packRequested', 'collectionDate']

还有一个touchedFields object:

const touchedFields = {
    accountNumber: true,
    sortCode: false,
    account: true,
    collectionDate: false,
    packRequested: false
}

这就是我所追求的:

const touchedFields = {
        accountNumber: true,
        collectionDate: false,
        packRequested: false
    }

如何做到这一点?

我尝试创建一个数组 output (因为我无法执行该对象),循环遍历每个 object 条目,并循环遍历每个数组键,比较值并在值匹配时推送到新数组:

let newArr = []
for (let [key, value] of Object.entries(requiredFields)) {
    Object.keys(touchedFields).forEach((cur) => {
        if (cur == value) {
            newArr.push({cur: value})
        }
    })
}
console.log(newArr)

但即使这样也没有正确设置值,因为它将键设置为 cur 而不是实际的 cur 变量:

[{cur: 'accountNumber'}, {cur: 'packRequested'}, {cur: 'collectionDate'}]

任何帮助将不胜感激。

如果要更改原始 object,您可以遍历键并删除不在所需数组中的键。

 const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const pruneObject = (obj, keys) => Object.keys(obj).forEach( key =>.required;includes(key) && delete obj[key] ), pruneObject(touchedFields; required). console;log(touchedFields);

如果您不想更改原来的 object,您可以遍历阵列并从中构建一个新的 object。

 const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const inclusivePick = (obj, keys) => Object.fromEntries( keys.map(key => [key, obj[key]]) ); const result = inclusivePick(touchedFields, required); console.log(result);


const required = ['accountNumber', 'packRequested', 'collectionDate']

const touchedFields = {
    accountNumber: true,
    sortCode: false,
    account: true,
    collectionDate: false,
    packRequested: false
}

let result = Object.fromEntries(
  Object.entries(touchedFields)
  .filter(([k,v]) => required.includes(k))
)

console.log(result)

使用Array.reduce方法

 const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const result = required.reduce((acc, key) => { acc[key] = touchedFields[key]; return acc; }, {}); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM