Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript函数比较数组中的值并返回它_Javascript_Typescript_Underscore.js - Fatal编程技术网

JavaScript函数比较数组中的值并返回它

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

Mods:请随意解释这个问题。 我要做的是告诉数组中给定的动态属性的所有值是否相同,如果为true,则返回它

我使用下划线.js在3行中实现了这一点,但是,我希望这可以简化/缩短:

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;
}