我有一个JavaScript对象,如下所示
testObj = {
1/10/2015: {},
2/10/2015: {},
3/10/2015: {},
4/10/2015: {},
29/09/2015: {},
30/09/2015: {}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试对此进行排序,以便日期按日期按递增顺序排列.为此我完成了以下工作
const orderedDates = {};
Object.keys(testObj).sort(function(a, b) {
return moment(moment(b, 'DD/MM/YYYY') - moment(a, 'DD/MM/YYYY')).format('DD/MM/YYYY');
}).forEach(function(key) {
orderedDates[key] = testObj[key];
})
rangeObj = orderedDates;
Run Code Online (Sandbox Code Playgroud)
然而,这并没有对日期进行排序.它仍然返回与之相同的确切对象testObj.如何根据日期键对对象进行排序?
我正在尝试对 JavaScript 对象进行自定义排序,但无法了解如何以正确的方式执行此操作。假设我有一个像这样的对象
var test = {
'yellow': [],
'green': [],
'red': [],
'blue': []
}
Run Code Online (Sandbox Code Playgroud)
我有一个数组,其值为:var arr = ['red', 'green', 'blue', 'yellow'];
所以排序后,我想按照数组中指定的顺序输出,例如
var test = {
'red': [],
'green': [],
'blue': [],
'yellow': []
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我无法实现这一目标。我在这里尝试做的是循环和排序,但它以 AZ 模式排序,而不是按照我指定数组的顺序。另外,您可能会问我什至没有在排序函数中使用我的数组,但我没有得到实现这一目标的确切方法。
var test = {
'yellow': [],
'green': [],
'red': [],
'blue': []
}
var keys = Object.keys(test);
console.log(keys.sort()); //["blue", "green", "red", "yellow"] which is not ordered nor it's an object
Run Code Online (Sandbox Code Playgroud)
任何指示都会有帮助。
注意:我有这个特定要求,因为我使用带有默认{{#each}}块的 HandleBars,但我想按该顺序循环内部对象。我可以循环 Handlebars 中的对象并将它们传递给模板,但不使用模板引擎的功能。我想要车把将它们循环起来还是我错过了什么?如果我循环对象并将整个标记传递给车把模板,可以吗?
我有一个由键值对组成的javascript对象,我想在某个位置插入一个键值对,在下面的示例中我想将它插入到第一个键值对之后。
var obj = {key1: "value1", key2: "value2"};
console.log(obj);// {key1: "value1", key2: "value2"}
obj.key3 = "value3";
console.log(obj);// {key1: "value1", key2: "value2", key3: "value3"}
Run Code Online (Sandbox Code Playgroud) 我正在编写频率计数器代码,在其中我计算给定字符串中每个单词的频率。
我正在创建一个对象,并将每个单词都作为键,并且将频率作为值来构成键值对。
function wordCount(str) {
tempStr = str.toUpperCase()
arr1 = tempStr.split(" ")
let frequencyConter1 = {}
for (let val of arr1) {
frequencyConter1[val] = (frequencyConter1[val] || 0) + 1
}
for (key in frequencyConter1) {
console.log(key, frequencyConter1[key])
}
}
wordCount("My name is Xyz 1991 He is Abc Is he allright")
Run Code Online (Sandbox Code Playgroud)
1991 1
MY 1
NAME 1
IS 3
XYZ 1
HE 2
ABC 1
ALLRIGHT 1
Run Code Online (Sandbox Code Playgroud)
为什么1991年的产量居首位?
应该在XYZ之后,对吗?
我有这个测试:
\n\nlet obj = {\r\n "5555555555": 5,\r\n "4444444444": 4,\r\n "3333333333": 3,\r\n "2222222222": 2,\r\n};\r\nconsole.log(Object.keys(obj));Run Code Online (Sandbox Code Playgroud)\r\n输出是["2222222222", "3333333333", "5555555555", "4444444444"]
然而,EcmaScript 2015 规范定义了[[OwnPropertyKeys]]的顺序:
\n\n\n\n\n\n
\n- 对于O的每个自己的属性键P来说,它是一个整数索引,按升序数字索引顺序,\n a。添加P作为keys的最后一个元素。
\n
整数索引定义为:
\n\n\n\n\n整数索引是一个字符串值属性键,它是规范的数字字符串 \n,其数值是正
\n+0整数 \xe2\x89\xa4 2 53 \xe2\x88\x921。\n数组索引是一个整数索引,其数值i的范围为 +0 \xe2\x89\xa4 i < 2 32 \xe2\x88\x921。
由于上面代码片段中的所有四个属性obj根据定义都是整数索引,为什么当我调用 …
我试图理解javascript对象在使用它们作为关联数组时的作用.
来自ECMA:
4.3.3对象是Object类型的成员.它是一个无序的属性集合,每个属性都包含一个原始值,对象或函数.存储在对象属性中的函数称为方法.
在浏览器中使用它们(chrome):
x = { 2: 'a', 3: 'b', 1: 'c' }
> Object {1: "c", 2: "a", 3: "b"}
y = { 'b': 2, 'c': 3, 'a': 1 }
> Object {b: 2, c: 3, a: 1}
Run Code Online (Sandbox Code Playgroud)
虽然在第一个示例中将数字作为键,但是它们变得有序,在第二个示例中使用字符串,它们不会(ordered = a,b,c).
我正在使用这些对象与字符串键,我真的不希望他们在应用程序的某个阶段(如果这甚至可能)改变顺序,因为它可能会崩溃我正在使用的管道.
问题是,这种方法对于每台javascript机器都是安全和正常的,还是应该使用其他方法来保证订单不会改变?
谢谢!
编辑:我使用的是node.js,它运行在V8(chrome引擎)上,"按插入顺序排序非数字属性"(Felix Kling).愿V8的这种行为发生变化吗?
我有以下对象:
var obj = {"last_name": "john", "age": 23, "city": "London"}
Run Code Online (Sandbox Code Playgroud)
我想在此对象的开头添加first_name的新元素,如下所示:
{"first_name": "Samuel", "last_name": "john", "age": 23, "city": "London"}
Run Code Online (Sandbox Code Playgroud)
我知道我可以做,obj.first_name = "Samuel"但它在对象的末尾添加了新元素.我怎样才能在开始时添加它?
我有对象包含这样的数据
const testData = {
"11": {
"data": {
"firstName": "firstName",
"lastName": "lastName"
}
},
"12": {
"data": {
"firstName": "firstName",
"lastName": "lastName"
}
},
"00": {
"data": {
"firstName": "firstName",
"lastName": "lastName"
}
},
"01": {
"data": {
"firstName": "firstName",
"lastName": "lastName"
}
},
"final": {
"data": {
"firstName": "firstName",
"lastName": "lastName"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想按对象键对数据进行排序 00, 01, 11, 12, final
我已经尝试过这种方法,但是我无法达到我想要的效果。任何想法都会感激不尽?
sorted = Object.keys(testData).sort().reduce((acc, key) => ({
...acc, [key]: testData[key]
}), {})
console.log(sorted)
Run Code Online (Sandbox Code Playgroud) I would like to avoid writing lots of code for a big list of items. For example, I have this:
let f_a = document.querySelector('#FToneA');
let f_b = document.querySelector('#FToneB');
let f_c = document.querySelector('#FToneC');
// etc...
let fNameList = [f_a, f_b, f_c,]; // etc...
let fToneA = new Audio('../instrumentarium/assets/snd/flute/A_F.wav');
let fToneB = new Audio('../instrumentarium/assets/snd/flute/B_F.wav');
let fToneC = new Audio('../instrumentarium/assets/snd/flute/C_F.wav');
// etc...
let fToneList = [fToneA, fToneB, fToneC,]; // etc...
Run Code Online (Sandbox Code Playgroud)
And then I have the events that should happen with each of the …
我需要获取具有值的对象的最后一个键。所以如果这将是对象......
const obj = { first: 'value', second: 'something', third: undefined, fourth: undefined }
Run Code Online (Sandbox Code Playgroud)
... 我需要得到 second
obj = { first: 'value', second: 'something', third: 'else', fourth: undefined }
// result should be: 'third'
obj = { any: 'value', other: 'something', thing: undefined, bla: undefined }
// result should be: 'other'
Run Code Online (Sandbox Code Playgroud)