gpt4 book ai didi

javascript - 从对象图中删除子对象 (JavaScript)

转载 作者:行者123 更新时间:2023-12-03 07:42:35 25 4
gpt4 key购买 nike

如何在给定对象图中递归子数组并在不知道数组名称的情况下删除项目?我的所有对象都有三个审核字段:

{
id, // String
userId, // String
createdDate, // Date
updatedDate, // Date - OPTIONAL
deletedDate // Date - OPTIONAL
}

如果 deletedDate 属性存在,则应从数组中删除该项目。

示例:

var companies = [
{
id : 'abc123',
name : 'ABC, Inc.',
employees: [
{
id : 'abc-01',
name : 'Joe',
createdDate: '1/1/2015',
userId : 'asdf87612'
},
{
id : 'abc-02',
name : 'Mike',
createdDate: '1/1/2015',
deletedDate: '1/2/2015'
userId : 'asdf87612'
}
]
createdDate: '1/1/2015',
userId : 'asdf87612'
}
];

该函数需要足够通用,以便 1) 查找所有数组属性,2) 递归数组以查找设置了 deletedDate 属性的项目,以及 3) 从如果已设置 deletedDate 值,则为数组。

在上面的示例中,员工“Mike”将从数组中删除。

我一直在尝试使用 Lodash 来实现此目的,但没有成功......并且在试验时删除了我的测试文件。我会再次重新创建它,以便 SO 上的人们知道我并不想偷懒。

原始方法
这是我第一次(相当丑陋)尝试:

function removeDeleted (itemOrArray) {
if (itemOrArray == null || typeof itemOrArray == 'undefined') { return itemOrArray; }
var result = [],
items = (itemOrArray instanceof Array) ? itemOrArray : [itemOrArray];
for (var i = 0; i < items.length; i += 1) {
if (items[i].dateDeleted) { continue; }
for (var k = 0; k < Object.keys(items[i]).length; k += 1) {
var key = Object.keys(items[i])[k];
if (items[i][key] instanceof Array) {
items[i][key] = removeDeleted(items[i].key);
}
}
result.push(items[i]);
}
return result;
}

最佳答案

像这样的 lodash 应该可以工作。

var companies = companies.map(function(company) {
// map each value of the company
return _.omitBy(_.mapValues(company, function(value) {
// if the value is an array, remove an object in the array if the `deletedDate` prop exists
if(Array.isArray(value)) {
return _.remove(value, function(o) { return 'deletedDate' in o });
} else {
return value;
}
}), function(value) {
return Array.isArray(value) && value.length === 0;
});
});

文档:

  1. mapValues
  2. remove (如过滤器)
  3. omitBy

关于javascript - 从对象图中删除子对象 (JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35348133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com