我想检查数组中途中的每个孩子 我可以用更好的方式写它吗lodash
def duplicate(self):
vacations = Vacation.objects.filter(version_contrat=self)
self.pk = None
self.version = int(self.version)+1
self.save()
for vacation in vacations:
vacation.pk = None
vacation.version_contrat = self
vacation.save()
return print('clone to {}'.format(self))
答案 0 :(得分:1)
您可以使用_.has(object, path)
检查
path
是否是object
的直接属性。
_.has(test, '[1][2][3]') && doSomething;
或
_.has(test, [1, 2, 3]) && doSomething;
如果您想获取该值,请使用_.get(object, path, [default])
var test = [
[],
[
[],
[],
[
[], [], [], 42
]
]
];
console.log(test[1][2][3]);
console.log(_.has(test, '[1][2][3]'));
console.log(_.has(test, [1, 2, 3]));
console.log(_.has(test, '[1][2][30]'));
console.log(_.has(test, [1, 2, 30]));
console.log(_.get(test, '[1][2][3]'));
console.log(_.get(test, [1, 2, 3]));
console.log(_.get(test, '[1][2][30]'));
console.log(_.get(test, [1, 2, 30]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
答案 1 :(得分:1)
使用lodash获取/检查路径的常见方法有3种:
_。get-它将尝试基于路径获取值,并在找不到该值时提供default
_。has-如果找到或未找到路径,将为您提供布尔结果 _。hasIn-就像has一样,但是也会检查path是对象的直接属性还是继承的属性
_。result-将沿路径执行任何函数以获取值,否则将以_.get
的方式工作(没有函数礼物)
var data = [
[],
[
[],
[
'hello',
function(){ return 'foo'}
]
]
];
console.log('get:', _.get(data, '1.1.0'))
console.log('has:', _.has(data, '1.1.0'))
console.log('result:', _.result(data, '1.1.0'))
console.log('result:', _.result(data, '1.1.1'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
这里的共同点是所有人都接受path
作为可以执行您想要的操作的参数。只需提供deepest
路径,然后让这些方法为您检查/工作即可。
答案 2 :(得分:0)
使用_.get
,您可以在路径中获取值或返回默认值:
_.get(test, [1, 2, 3], doSomething);