You*_*sef 79 javascript jquery
我有一个像这样的javascript对象:
{ "a":4, "b":0.5 , "c":0.35, "d":5 }
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法来获得属性中的最小值和最大值,而无需遍历所有属性?因为我拥有的物体很大,我需要每两秒钟获得一次最小值/最大值.(对象的值不断变化).
Šim*_*das 118
试试这个:
var arr = Object.keys( obj ).map(function ( key ) { return obj[key]; });
Run Code Online (Sandbox Code Playgroud)
然后:
var min = Math.min.apply( null, arr );
var max = Math.max.apply( null, arr );
Run Code Online (Sandbox Code Playgroud)
现场演示: http ://jsfiddle.net/7GCu7/1/
更新:现代版(ES6 +)
let obj = { a: 4, b: 0.5 , c: 0.35, d: 5 };
let arr = Object.values(obj);
let min = Math.min(...arr);
let max = Math.max(...arr);
console.log( `Min value: ${min}, max value: ${max}` );Run Code Online (Sandbox Code Playgroud)
car*_*ira 18
在没有循环遍历所有n个元素的情况下,无法找到一般情况下的最大值/最小值(如果从1到n-1,则如何知道元素n是否不大于(或小于)当前最大/分钟)?
您提到值每隔几秒就会改变一次.如果您确切地知道哪些值发生了变化,您可以从先前的最大/最小值开始,并且只与新的值进行比较,但即使在这种情况下,如果其中一个值被修改为您的旧最大值/分钟,您可以需要再次循环它们.
另一种选择 - 再次,只有当更改的值的数量很小时 - 才会将值存储在诸如树或堆之类的结构中,并且当新值到达时,您将适当地插入(或更新)它们.但是,基于你的问题,你能否做到这一点并不明确.
Nie*_*sol 10
min并且max必须循环遍历输入数组 - 他们如何才能找到最大或最小的元素?
所以只需一个快速for..in循环即可.
var min = Infinity, max = -Infinity, x;
for( x in input) {
if( input[x] < min) min = input[x];
if( input[x] > max) max = input[x];
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试:
const obj = { a: 4, b: 0.5 , c: 0.35, d: 5 };
const max = Math.max.apply(null, Object.values(obj));
console.log(max) // 5
Run Code Online (Sandbox Code Playgroud)
// 1. iterate through object values and get them
// 2. sort that array of values ascending or descending and take first,
// which is min or max accordingly
let obj = { 'a': 4, 'b': 0.5, 'c': 0.35, 'd': 5 }
let min = Object.values(obj).sort((prev, next) => prev - next)[0] // 0.35
let max = Object.values(obj).sort((prev, next) => next - prev)[0] // 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94988 次 |
| 最近记录: |