gpt4 book ai didi

javascript - 如何在 javascript 中定义一组键/值和查找值并按顺序迭代该组?

转载 作者:行者123 更新时间:2023-12-01 11:13:42 24 4
gpt4 key购买 nike

我有一组键/值,例如 orange=123、banana=4、apple=567。我如何将这些键/值存储在 javascript 对象中,这样我就可以:

  1. 通过查找检索一个值,例如 set["orange"] 应该返回 123 并且,
  2. 按照添加键/值对的顺序遍历集合

似乎对于 1. 一个对象字面量是合适的,但不能保证迭代顺序,对于 2. 一个键/值对数组(对象字面量)将提供一个迭代顺序但不能提供查找基于键的值。

@* 感谢您的所有回答 - 这个问题不是很常见吗?像 jQuery 这样的库不包括对这种类型的支持吗?

最佳答案

如何编写自己的列表构造函数?

function List(obj) {

if (this instanceof List) {
var t = this,
keys = [];

/* inititalize: add the properties of [obj] to the list,
and store the keys of [obj] in the private keys array */
for (var l in obj) {
keys.push(l);
t[l] = obj[l];
}
/* public:
add a property to the list
*/
t.add =
function(key, value) {
t[key] = value;
keys.push(key);
return t; /* allows method chaining */
};

/* public:
return raw or sorted list as string, separated by [separator]
Without [sort] the order of properties is the order in which
the properties are added to the list
*/
t.iterate =
function(sort,separator){
separator = separator || '\n';
var ret = [],
lkeys = sort ? keys.slice().sort() : keys;

for (var i=0;i<lkeys.length;i++){
ret.push(lkeys[i]+': '+t[lkeys[i]]);
}
return ret.join(separator);
};

} else if (obj && obj instanceof Object) {
return new List(obj);

} else if (arguments.length === 2) {
var a = {};
a[String(arguments[0])] = arguments[1];
return new List(a);

} else { return true; }

/* the 'if (this instanceof List)' pattern makes
the use of the 'new' operator obsolete. The
constructor also allows to be initialized with
2 parameters => 'List(key,value)'
*/
}

现在您可以将其原始(您添加 Prop 的顺序保持不变)或排序:

var myList = 
List( { orange:123,
banana:4,
apple:567 }
);
myList.add('peach',786);
alert(myList.iterate());
/*=>output:
orange: 123
banana: 4
apple: 567
peach: 786
*/
or: alert(myList.iterate(1));
/*=>output:
apple: 567
banana: 4
orange: 123
peach: 786
*/

关于javascript - 如何在 javascript 中定义一组键/值和查找值并按顺序迭代该组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com