如何循环/处理Javascript Key:Value对?

时间:2018-08-12 04:40:54

标签: javascript arrays

考虑以下代码:

a = {};
a['a'] = 1;
a['b'] = 3;
a['c'] = 5;
a['d'] = 2;

b = [];
b['a'] = 1;
b['b'] = 3;
b['c'] = 5;
b['d'] = 2;

console.log(typeof a, typeof b);
console.log(a);
console.log(b);

输出console.log如下:

object object
{ a: 1, b: 3, c: 5, d: 2 }
[ a: 1, b: 3, c: 5, d: 2 ]

确保它们都是object类型,据我了解,akey:value对的对象,其中b是{{1 }}对。这是正确的假设吗?

除了[key:value]循环模式外,我还必须使用迭代器索引来获取值(for(index in array)),还有一种更好,更简单的方法来循环浏览这些键/值对来获取索引/值还是只处理每个索引处的数据,类似于array[index]map的数组?

我遇到的一个此类问题是,如果我想以最少的数量来抓取钥匙(在上述示例中为“ a”),有没有办法不用{{1} }模式?

1 个答案:

答案 0 :(得分:2)

在Javascript中,数组是对象,因此您可以 像在上面的示例中一样添加键,但这不是使用数组的常规方法,可能会使很多人困惑您的代码。有时候,向数组添加属性很有用,但是将其用作键存储绝对不是常规。

如果要使用数字索引对排序,请使用数组:

let arr = []
arr.push(10)
arr.push(20)
console.log(arr)
console.log(arr[0])

如果您需要顺序不重要的属性,并且您将拥有字符串键,请使用一个对象。在上面的示例中,您同时使用了两种类型的对象-没有理由使用这样的数组。

已经说过,如果要从对象迭代值,则可以使用Object.values()。如果只想处理值,则会从对象传递值的数组:

a = {};
a['a'] = 1;
a['b'] = 3;
a['c'] = 5;
a['d'] = 2;

console.log(Object.values(a))

// process them
let newArr = Object.values(a).map(n => n * 10)
console.log(newArr)

Object.entries也很有用-它返回键/值对的数组,使用reduce()可以找到最小值的一个好方法:

a = {
  a: 1,
  b: 3,
  c: 5,
  d: 2
};

// current will be an array of the form [key, value]
let [minKey, minValue] = Object.entries(a).reduce((min, current) => min[1] < current[1] ? min : current)
console.log(minKey, minValue)