如何更好地编写它,例如Lodash

时间:2018-11-28 15:45:57

标签: javascript lodash

我想检查数组中途中的每个孩子 我可以用更好的方式写它吗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))

3 个答案:

答案 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种:

  1. _。get-它将尝试基于路径获取值,并在找不到该值时提供default

  2. _。has-如果找到或未找到路径,将为您提供布尔结果 _。hasIn-就像has一样,但是也会检查path是对象的直接属性还是继承的属性

  3. _。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);