数组中不同属性值对象的 Javascript 编号
Javascript number of object by different property values in array
计算数组中具有不同对象属性 p 值的对象数的最佳方法。
function([{"p":"a"},{"p":"b"},{"p":"a"}]){
// some code
}
// in this case return 2
您可以使用 Array.prototype.filter(( 来保留所需的值。在这种情况下,您必须创建一个变量temp
用于存储重复值,并在 filter function
中返回true
(如果大小写中不存在(。因此,您有一个新的唯一值数组。
var arr = [{"p":"a"},{"p":"b"},{"p":"a"}], temp = [];
var arrUniques = arr.filter(function(obj){
return temp.indexOf(obj.p) === -1 ? !!temp.push(obj.p) : false
});
alert(arrUniques.length)
带有Map
:
var props = new Map();
for (var i = 0; i < array.length; i++) {
var prop = array[i].p,
count = props.get(prop) || 0;
props.set(prop, count + 1);
}
var size = props.size;
如果属性可以安全地强制转换为字符串,则可以使用公共对象:
var props = {};
...
var size = Object.keys(props).length;
否则,Map
是你的答案。
function getUniquePropertyCount(a, p) {
return a.reduce(function (res, el) {
!~res.indexOf(el[p]) && res.push(el[p]);
return res;
}, []).length;
}
document.write(getUniquePropertyCount([{ "p": "a" }, { "p": "b" }, { "p": "a" }], 'p'));
我想这是其中一个问题,如果你问四个程序员,你会得到五个答案。
到目前为止,其他答案显示了一些有趣的方法。我会注意浏览器兼容性;例如,Map()
仅在最新的浏览器中可用,在 IE 10 或更早版本中不可用。
所以这里有另一个解决方案。它的代码更多一些,但它很容易理解,并且它适用于每个浏览器:
function countUniqueProperties( key, array ) {
var count = 0, values = {};
for( var i = 0; i < array.length; ++i ) {
var value = array[i][key];
if( ! Object.prototype.hasOwnProperty.call( values, value) ) {
++count;
values[value] = true;
}
}
return count;
}
countUniqueProperties( 'p', [ {p:'a'}, {p:'b'}, {p:'a'} ] );
这里一个复杂的部分是 Object.prototype.hasOwnProperty.call(values,value)
.你可以只使用 values.hasOwnProperty(value)
,但如果你的属性值之一是字符串"hasOwnProperty"
,这将失败:
countUniqueProperties( 'p', [ {p:'a'}, {p:'hasOwnProperty'}, {p:'a'} ] );
使用较长的形式可避免此问题。
lodash 非常适合这样的事情。
用
_.uniq([{"p":"a"},{"p":"b"},{"p":"a"}]).length
它会返回2
.
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值