我正在制作一个实时更新用户位置和路径的应用程序,并在Google地图上显示.我的功能允许使用每秒更新一次的对象同时跟踪多个用户.
现在,当用户按下Android应用程序中的按钮时,坐标将被发送到数据库,每次位置更改时,都会在地图上更新标记(并形成折线).
由于我有多个用户,因此我会发送一个唯一且随机生成的字母数字字符串,以便为每个用户显示单独的路径.当JS从数据库中提取此数据时,它会检查用户是否存在,如果不存在,则会创建一个值为列表的新密钥.它看起来像这样:
loc = {f096012e-2497-485d-8adb-7ec0b9352c52: [new google.maps.LatLng(39, -86),
new google.maps.LatLng(38, -87),
new google.maps.LatLng(37, -88)],
44ed0662-1a9e-4c0e-9920-106258dcc3e7: [new google.maps.LatLng(40, -83),
new google.maps.LatLng(41, -82),
new google.maps.LatLng(42, -81)]}
Run Code Online (Sandbox Code Playgroud)
我正在做的是存储一个坐标列表作为键的值,这是用户的ID.每次更改位置时,我的程序会通过添加到列表来更新此列表(这可以正常工作).
我需要做的是每次位置更改时更新标记的位置.我想通过选择数组中的最后一项来做到这一点,因为那将是最后一个已知的位置.现在,每次更改位置时,都会向地图添加一个新标记(示例中的每个点都会在该位置显示标记),因此继续添加标记.
每次位置更新时,我会使用'for(x in loc)`语句从列表中获取最后一个位置并使用它来更新标记.如何在哈希中从数组中选择最后一个元素?
JavaScript Array类没有提供检索数组最后一个元素的最后一个方法,这有点奇怪.我知道解决方案很简单(Ar [Ar.length-1]),但是,这种情况经常被使用.
任何严重的原因,为什么没有纳入呢?
每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?
以TJ Holowaychuk的should.js为例.他增加了一个简单的getter来Object,一切工作正常(来源).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Run Code Online (Sandbox Code Playgroud)
这真的很有道理.例如,可以扩展Array.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)
是否有任何反对扩展本机类型的论据?
我使用简单的堆栈算法开发了一个方程解析器,它将处理二进制(+, - ,|,&,*,/等)运算符,一元(!)运算符和括号.
但是,使用这种方法会让我拥有相同优先级的所有内容 - 无论操作符如何,都会从左到右进行评估,尽管可以使用括号强制执行优先级.
所以现在"1 + 11*5"会返回60,而不是人们所期望的56.
虽然这适用于当前项目,但我希望有一个通用例程,我可以用于以后的项目.
编辑清晰:
解析具有优先级的方程的好算法是什么?
我对一些简单的实现感兴趣,并且理解我可以自己编写代码来避免使用可用代码的许可问题.
语法:
我不明白语法问题 - 我是手写的.这很简单,我认为不需要YACC或Bison.我只需要用诸如"2 + 3*(42/13)"之类的方程计算字符串.
语言:
我在C中这样做,但我对算法感兴趣,而不是语言特定的解决方案.C足够低,如果需要,很容易转换成另一种语言.
代码示例
我发布了上面讨论的简单表达式解析器的测试代码.项目要求发生了变化,因此我从不需要优化性能或空间代码,因为它没有包含在项目中.它是原始的详细形式,应该易于理解.如果我在运算符优先级方面做了更多的事情,我可能会选择宏hack,因为它简单地匹配程序的其余部分.但是,如果我在一个真实的项目中使用它,我将寻求一个更紧凑/更快速的解析器.
相关问题
-亚当
什么是与此方法等效的JavaScriptC#:
var x = "|f|oo||";
var y = x.Trim('|'); // "f|oo"
Run Code Online (Sandbox Code Playgroud)
C#仅在字符串的开头和结尾处修剪所选字符!
我有一个像这样的数组项列表:
const items = [
{ a: 1 },
{ b: 2 },
{ c: 3 },
]
Run Code Online (Sandbox Code Playgroud)
如何返回/记录最后一个元素:{ c: 3 }
到目前为止,这是我尝试过的:
let newarray = items.map((item) => {
console.log(item);
})
console.log(newarray);
Run Code Online (Sandbox Code Playgroud) 我想要获得最后一个未被选中的值.我已经尝试了很多方法但是这可以给我最后选择的值(通过使用最后一个索引)不是最后未选择的.有什么办法吗?
$('#f_district').chosen().change( function(evt, params) {
if(params.deselected)
{
alert($(this).val()); // it returns null how I can get last unselect value?
}
else
{
var arr=$(this).val();
alert(arr[arr.length-1]);
}
});
Run Code Online (Sandbox Code Playgroud) 我是node.js和JavaScript的新手,所以这个问题可能很简单,但我无法弄清楚.
我在数组中有很多项目,但只想得到最后一项.我试图使用lodash但它不知何故不提供我在数组中的最后一项.
我的数组现在看起来像这样:
images : ['jpg.item_1', 'jpg.item_2', 'jpg.item_3', ..., 'jpg.item_n']
Run Code Online (Sandbox Code Playgroud)
我想得到:
images : 'jpg.item_n'
Run Code Online (Sandbox Code Playgroud)
使用lodash我得到:
images : ['g.item_1', 'g.item_2', 'g.item_n']
Run Code Online (Sandbox Code Playgroud)
看起来我只是在jpg中得到最后一个字母,即'g'.
我使用lodash的代码如下所示:
const _ = require('lodash');
return getEvents().then(rawEvents => {
const eventsToBeInserted = rawEvents.map(event => {
return {
images: !!event.images ? event.images.map(image => _.last(image.url)) : []
}
})
})Run Code Online (Sandbox Code Playgroud)
我有一个数组包含
const data = ['a', 'b', 'c', 'd'];
Run Code Online (Sandbox Code Playgroud)
如何找到最后一个元素,结果应该是'd'
var myarray = [];
var result1 = myarray[0];
var result2 = myarray[1];
var result3 ....etc...
Run Code Online (Sandbox Code Playgroud)
首先选择很容易,因为它只是0.如何将最后一个放入var中?这似乎是一个简单的问题,但我一定是谷歌搜索错误,因为我找不到任何有效的答案.
javascript ×9
arrays ×5
jquery ×2
algorithm ×1
ecmascript-6 ×1
equation ×1
google-maps ×1
node.js ×1
parsing ×1
prototype ×1
string ×1
trim ×1