我有一个非常简单的JavaScript数组,可能包含也可能不包含重复项.
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
Run Code Online (Sandbox Code Playgroud)
我需要删除重复项并将唯一值放在一个新数组中.
我可以指出我尝试过的所有代码,但我认为它没用,因为它们不起作用.我也接受jQuery解决方案.
套装似乎是一个很好的方式来创建保证唯一的元素数组,但它不公开任何好的办法来获取属性,除了发电机[设置] .values,被称为在一个尴尬的方式mySet.values.next().
如果您可以map在集合上调用和类似的函数,那就没问题了.但你也不能这样做.
我试过了Array.from,但似乎只是将类似数组(NodeList和TypedArrays?)的对象转换为Array.另一个尝试:Object.keys对Sets不起作用,而Set.prototype没有类似的静态方法.
所以,问题是:是否有任何方便的内置方法来创建具有给定Set值的数组?(元素的顺序并不重要).
如果没有这样的选择,那么也许有一个很好的惯用的单行代码呢?喜欢,使用for...of或类似?
我需要检查一个JavaScript数组,看看是否有任何重复的值.最简单的方法是什么?我只需要找到重复的值是什么 - 我实际上并不需要它们的索引或重复它们的次数.
我知道我可以遍历数组并检查匹配的所有其他值,但似乎应该有一个更简单的方法.有任何想法吗?谢谢!
假设我有以下内容:
var array =
[
{"name":"Joe", "age":17},
{"name":"Bob", "age":17},
{"name":"Carl", "age": 35}
]
Run Code Online (Sandbox Code Playgroud)
能够获得所有不同年龄的数组的最佳方法是什么,以便我得到一个结果数组:
[17, 35]
Run Code Online (Sandbox Code Playgroud)
有没有办法我可以选择构造数据或更好的方法,这样我就不必遍历每个数组检查"age"的值并检查另一个数组是否存在,如果没有则添加它?
如果有某种方式我可以在没有迭代的情况下拉出不同的年龄......
我希望改进的当前无效方式......如果它意味着不是"数组"是一个对象数组,而是一个带有一些唯一键(即"1,2,3")的对象的"地图"好的 我只是在寻找性能最高效的方式.
以下是我目前的做法,但对我来说,虽然迭代确实有效,但迭代看起来效率很高......
var distinct = []
for (var i = 0; i < array.length; i++)
if (array[i].age not in distinct)
distinct.push(array[i].age)
Run Code Online (Sandbox Code Playgroud) 我注意到在监控/尝试回答常见的jQuery问题时,有一些使用javascript而不是jQuery的实践,实际上可以让你写得更少,并做 ...相同的数量.并且还可以产生性能优势.
一个具体的例子
$(this) VS this
在单击事件中引用单击的对象id
jQuery的
$(this).attr("id");
Run Code Online (Sandbox Code Playgroud)
使用Javascript
this.id;
Run Code Online (Sandbox Code Playgroud)
还有其他类似的常见做法吗?可以更轻松地完成某些Javascript操作,而无需将jQuery添加到组合中.或者这是一个罕见的情况?(jQuery"快捷方式"实际上需要更多代码)
编辑:虽然我很欣赏有关jQuery与普通javascript性能的答案,但实际上我正在寻找更多的定量答案. 在使用jQuery时,实际上可以更好地使用普通javascript代替使用的实例(可读性/紧凑性)$().除了我在原始问题中给出的例子.
我正在使用此函数将文件大小(以字节为单位)转换为人类可读的文件大小:
function getReadableFileSizeString(fileSizeInBytes) {
var i = -1;
var byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB'];
do {
fileSizeInBytes = fileSizeInBytes / 1024;
i++;
} while (fileSizeInBytes > 1024);
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
};
Run Code Online (Sandbox Code Playgroud)
但是,似乎这并非100%准确.例如:
getReadableFileSizeString(1551859712); // output is "1.4 GB"
Run Code Online (Sandbox Code Playgroud)
不应该这样"1.5 GB"吗?似乎1024的划分正在失去精度.我完全误解了某些东西,还是有更好的方法来做到这一点?
如何获取数组中的唯一值列表?我是否总是必须使用第二个数组,或者在JavaScript中是否有与java的hashmap类似的东西?
我将只使用JavaScript和jQuery.不能使用其他库.
给定一个['0','1','1','2','3','3','3']数组,结果应该是['0','1','2','3'].
JQuery有两个版本供下载,一个是Production(19KB,Minified和Gzipped),另一个是Development(120KB,Uncompressed Code).
现在是紧凑的19kb版本,如果你下载它,你会看到仍然是一个javascript可执行代码.他们是如何紧凑的呢?我怎么能像这样'缩小'我的代码呢?
存储忽略任何重复的字符串列表的最有效方法是什么?我在想字典可能是最好通过编写dict [str] = false来插入字符串; 并通过键枚举列表.这是一个好的解决方案吗?
javascript ×9
arrays ×5
unique ×3
jquery ×2
c# ×1
collections ×1
duplicates ×1
filesize ×1
gzip ×1
performance ×1
syntax ×1