JavaScript函数比较数组中的值并返回它
Mods:请随意解释这个问题。 我要做的是告诉数组中给定的动态属性的所有值是否相同,如果为true,则返回它 我使用下划线.js在3行中实现了这一点,但是,我希望这可以简化/缩短:JavaScript函数比较数组中的值并返回它,javascript,typescript,underscore.js,Javascript,Typescript,Underscore.js,Mods:请随意解释这个问题。 我要做的是告诉数组中给定的动态属性的所有值是否相同,如果为true,则返回它 我使用下划线.js在3行中实现了这一点,但是,我希望这可以简化/缩短: var val = this.children[0]["myProperty"]; var same = _.all(this.children, child => child["myProperty"] === val); return same ? val : null; 因此,如果: this.chi
var val = this.children[0]["myProperty"];
var same = _.all(this.children, child => child["myProperty"] === val);
return same ? val : null;
因此,如果:
this.children=[{“myProperty”:null},{“myProperty”:2},{“myProperty”:1},{“myProperty”:1}]代码>返回null
this.children=[{“myProperty”:1},{“myProperty”:1},{“myProperty”:1},{“myProperty”:1}]代码>返回1
注意,“myProperty”的值是一个单位整数或null使用普通javascript和reduce
,这似乎是可行的,或者它可能会将您推向正确的方向:
function children(arr,prop){
return arr.reduce(
function(prevVal,curVal){
return prevVal == curVal[prop] ? prevVal : null
},
arr[0][prop]
);
}
children([{"myProperty":null},{"myProperty":2},{"myProperty":1},{"myProperty":1}],'myProperty')
> null
children([{"myProperty":1},{"myProperty":1},{"myProperty":1},{"myProperty":1}],'myProperty')
> 1
或
具有动态属性:
var prop = "myProperty";
//vanilla JS
return this.children.map(o => o[prop]).reduce((acc, v) => acc === v? v: null);
//and underscore
return _.reduce(_.pluck(this.children, prop), (acc, v) => acc === v? v: null);
您自己的解决方案会尽快返回负结果。它仍然是O(n),但如果子项
很大且值很少相等,则差异可能是合理的(几乎永远不会)。在vanilla JS中,使用:
您可以使用.myProperty
而不是[“myProperty”]
删除几个字符,除非myProperty
是变量的值。是的,它是动态属性。我希望能将all
和filter
功能进行某种组合,这是一个非常好的单行程序!我应该选哪一个其实没关系,它们基本上是一样的。如果已经使用下划线,请保持一致。如果你没有,你不必仅仅为了解决这个问题而包含它。
var prop = "myProperty";
//vanilla JS
return this.children.map(o => o[prop]).reduce((acc, v) => acc === v? v: null);
//and underscore
return _.reduce(_.pluck(this.children, prop), (acc, v) => acc === v? v: null);
function childrenValue(prop) {
var first = this.children[0][prop];
return this.children.every(child => child[prop] === first) ? first : null;
}