相关疑难解决方法(0)

根据日期键对javascript对象进行排序

我有一个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 sorting

3
推荐指数
1
解决办法
2609
查看次数

我们如何自定义排序 JavaScript 对象键?

我正在尝试对 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 sorting javascript-objects handlebars.js

3
推荐指数
1
解决办法
6214
查看次数

在javascript对象的某个位置插入键值对

我有一个由键值对组成的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)

javascript

3
推荐指数
2
解决办法
2857
查看次数

对象如何在javascript中工作

我正在编写频率计数器代码,在其中我计算给定字符串中每个单词的频率。

我正在创建一个对象,并将每个单词都作为键,并且将频率作为值来构成键值对。

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之后,对吗?

javascript object

3
推荐指数
1
解决办法
57
查看次数

大数字索引的 Object.keys 顺序?

我有这个测试:

\n\n

\r\n
\r\n
let 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
\r\n
\r\n

\n\n

输出是["2222222222", "3333333333", "5555555555", "4444444444"]

\n\n

然而,EcmaScript 2015 规范定义了[[OwnPropertyKeys]]的顺序:

\n\n
\n
    \n
  1. 对于O的每个自己的属性键P来说,它是一个整数索引,按升序数字索引顺序,\n a。添加P作为keys的最后一个元素。
  2. \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。

\n
\n\n

由于上面代码片段中的所有四个属性obj根据定义都是整数索引,为什么当我调用 …

javascript ecmascript-6

3
推荐指数
1
解决办法
236
查看次数

javascript中的对象属性排序

我试图理解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的这种行为发生变化吗?

javascript v8

2
推荐指数
1
解决办法
2051
查看次数

如何在开始时在Javascript对象中添加键/值对

我有以下对象:

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"但它在对象的末尾添加了新元素.我怎样才能在开始时添加它?

javascript

2
推荐指数
2
解决办法
3185
查看次数

当某些键为数字键时,无法按对象键对数据进行排序

我有对象包含这样的数据

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)

javascript object

1
推荐指数
1
解决办法
119
查看次数

A shorter way to write for loops avoiding making too many similar if's?

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 …

javascript

-1
推荐指数
1
解决办法
53
查看次数

如何获取具有值的对象的最后一个键

我需要获取具有值的对象的最后一个键。所以如果这将是对象......

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)

javascript

-2
推荐指数
1
解决办法
2127
查看次数