我正在尝试优化一个在JavaScript中对字符串进行二进制搜索的函数.
二进制搜索要求您知道密钥是==枢轴还是<枢轴.
但这需要在JavaScript中进行两次字符串比较,这与C具有strcmp()返回三个值(-1, 0, +1)(小于,等于,大于)的函数的类似语言不同.
JavaScript中是否存在这样的本机函数,它可以返回三元值,以便在二进制搜索的每次迭代中只需要进行一次比较?
例如,有这个代码:
var json = {
"user1" : {
"id" : 3
},
"user2" : {
"id" : 6
},
"user3" : {
"id" : 1
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能把这个json排成这样 -
var json = {
"user3" : {
"id" : 1
},
"user1" : {
"id" : 3
},
"user2" : {
"id" : 6
}
}
Run Code Online (Sandbox Code Playgroud)
我用ID对用户进行了排序..
我不知道如何在javascript中执行此操作..
这是我的字典:
const dict = {
"x" : 1,
"y" : 6,
"z" : 9,
"a" : 5,
"b" : 7,
"c" : 11,
"d" : 17,
"t" : 3
};
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来将dict字典从最小到最大,或从最大到最小.或者甚至没问题我有一个带有排序键的数组.但我不知道如何使用这样的东西javascript.在使用之前我已经完成了python,像这样:
import heapq
from operator import itemgetter
thirty_largest = heapq.nlargest(8, dict.iteritems(), key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索过它,我发现数组有sort()功能但没有字典.所以我的问题是:我如何对字典进行排序或按排序顺序获得前5大值?
我有对象的数组,其中对象看起来像这样(值更改):
{
stats: {
hp: 2,
mp: 0,
defence: 4,
agility: 11,
speed: 6,
strength: 31
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过速度降序对它们进行排序:
array.sort((a, b) => {
return b.stats.speed - a.stats.speed
})
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误,我无法解释最新情况:
TypeError:无法分配给对象'[object Array]'的只读属性'2'
我错过了什么?
编辑:redux存储中的对象数组:
const enemyDefaultState = [
{
name: 'European Boy1',
stats: {
hp: 2,
mp: 0,
defence: 4,
agility: 11,
speed: 6,
strength: 31
}
},
{
name: 'European Boy2',
stats: {
hp: 2,
mp: 0,
defence: 4,
agility: 4,
speed: 2,
strength: 31
}
},
{
name: 'European …Run Code Online (Sandbox Code Playgroud) 问题是:Chrome会自动对对象的属性进行排序.
如果我有一个像这样的对象:
var obj = {4: "first", 2: "second", 1: "third"};
Run Code Online (Sandbox Code Playgroud)
然后我下次做的时候:
for(var i in obj) {
console.debug(obj[i]);
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
third
second
first
但期望:
first
second
third
首先,我知道技术上Javascript没有关联数组,但我不知道如何标题并获得正确的想法.
所以这是我的代码,
var status = new Array();
status['BOB'] = 10
status['TOM'] = 3
status['ROB'] = 22
status['JON'] = 7
Run Code Online (Sandbox Code Playgroud)
而且我想按值对它进行排序,这样当我稍后循环它时,ROB首先是,然后BOB等等.
我试过了,
status.sort()
status.sort(function(a, b){return a[1] - b[1];});
Run Code Online (Sandbox Code Playgroud)
但他们似乎都没有做任何事情.
在阵列之前和之后将阵列打印到控制台导致它以相同的顺序出现.
我有两个或更多的JavaScript对象.我想合并它们添加公共属性的值,然后按值的降序对它们进行排序.
例如
var a = {en : 5,fr: 3,in: 9}
var b = {en: 8,fr: 21,br: 8}
var c = merge(a,b)
Run Code Online (Sandbox Code Playgroud)
c 应该是这样的:
c = {
fr: 24,
en: 13,
in:9,
br:8
}
Run Code Online (Sandbox Code Playgroud)
即,两个对象都是合并的,添加了公共密钥的值,然后对密钥进行了排序.
这是我尝试过的:
var a = {en : 5,fr: 3,in: 9}
var b = {en: 8,fr: 21,br: 8}
c = {}
// copy common values and all values of a to c
for(var k in a){
if(typeof b[k] != 'undefined'){
c[k] = a[k] + b[k]
}
else{ c[k] …Run Code Online (Sandbox Code Playgroud) 我有一个ajax调用,返回一个相当复杂的JSON对象,我很难对它进行排序.
我的电话:
$.post('/reports-ajax',arguments, function(data) {}
Run Code Online (Sandbox Code Playgroud)
响应:
{
"10001":{
"unitname":"Fort Worth",
"discounts":{"12-02-2012":"34.810000","12-03-2012":"20.810000","12-04-2012":"27.040000"},
"gross":{"12-02-2012":"56.730000","12-03-2012":"19.350000","12-04-2012":"66.390000"},
"net":{"12-02-2012":"61.920000","12-03-2012":"98.540000","12-04-2012":"39.350000"},
"discounts_total":82.66,
"gross_total":82.47,
"net_total":99.81,
"number":10001
},
"10002":{
"unitname":"Dallast",
"discounts":{"12-02-2012":"12.600000","12-03-2012":"25.780000","12-04-2012":"47.780000","12-05-2012":"45.210000"},
"gross":{"12-02-2012":"29.370000","12-03-2012":"91.110000","12-04-2012":"60.890000","12-05-2012":"51.870000"},
"net":{"12-02-2012":"16.770000","12-03-2012":"65.330000","12-04-2012":"13.110000","12-05-2012":"06.660000"},
"discounts_total":131.37,
"gross_total":33.24,
"net_total":101.87,
"number":10002
},
"32402":{
"unitname":"Austin",
"discounts":{"12-05-2012":"52.890000","12-02-2012":"22.430000","12-03-2012":"58.420000","12-04-2012":"53.130000"},
"gross":{"12-05-2012":"25.020000","12-02-2012":"2836.010000","12-03-2012":"54.740000","12-04-2012":"45.330000"},
"net":{"12-04-2012":"92.200000","12-05-2012":"72.130000","12-02-2012":"13.580000","12-03-2012":"96.320000"},
"discounts_total":186.87,
"gross_total":161.1,
"net_total":174.23,
"number":32402
}
}
Run Code Online (Sandbox Code Playgroud)
我用一个标准的每个调用来检查函数并用highcharts做一些很棒的东西,但现在我试图通过net_total调用对响应进行排序,我无法弄明白.
我尝试了.sort()它错误,它不是一个功能.我已经阅读了一段时间,但我猜我找不到合适的结果.这看起来很有希望:对一组JavaScript对象进行排序,但它失败了,.sort而不是一个函数.似乎大多数.sort都在[]数组上而不是完整的对象..
任何帮助将不胜感激.
按其值也是对象的键对对象进行排序,并对内部对象进行排序,即递归地对对象进行排序。排序应该按照键进行。
我研究了 Stackoverflow 的其他问题,但没有一个是针对对象递归排序的。
我调查的问题:
例子:
input = {
"Memo": {
"itemAmount1": "5",
"taxName1": "TAX",
"productPrice1": "10",
"accountName1": "Account Receivable (Debtors)"
},
"Footer": {
"productDescription2": "Maggie",
"itemQuantity2": "49.5",
"accountName2": "Account Receivable (Debtors)",
"taxName2": "TAX"
},
"Header": {
"itemDiscount3": "10",
"accountName3": "Account Receivable (Debtors)",
"productPrice3": "10",
"taxName3": "TAX"
}
}
Run Code Online (Sandbox Code Playgroud)
输出
output = {
"Footer": {
"accountName2": "Account Receivable (Debtors)",
"itemQuantity2": "49.5",
"productDescription2": "Maggie",
"taxName2": "TAX"
},
"Header": {
"accountName3": "Account Receivable (Debtors)",
"itemDiscount3": …Run Code Online (Sandbox Code Playgroud) var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};
keysSorted = Object.keys(list).sort(function(a,b){return list[a]-list[b]})
alert(keysSorted); // bar,me,you,foo
Run Code Online (Sandbox Code Playgroud)
我在做对象排序.以上源代码在Javascript中工作.但是没有在Node.js中工作.我有这样的错误.
keysSorted = Object.keys(list).sort(function(a,b){return list[a]-list[b]})
^
TypeError: Object.keys is not a function
Run Code Online (Sandbox Code Playgroud)
我不知道为什么.请帮我.
javascript ×10
sorting ×6
jquery ×2
json ×2
node.js ×2
object ×2
comparison ×1
dictionary ×1
optimization ×1
recursion ×1
string ×1