考虑以下代码:
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
类型,据我了解,a
是key:value
对的对象,其中b
是{{1 }}对。这是正确的假设吗?
除了[key:value]
循环模式外,我还必须使用迭代器索引来获取值(for(index in array)
),还有一种更好,更简单的方法来循环浏览这些键/值对来获取索引/值还是只处理每个索引处的数据,类似于array[index]
或map
的数组?
我遇到的一个此类问题是,如果我想以最少的数量来抓取钥匙(在上述示例中为“ a”),有没有办法不用{{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)