如何在JavaScript中将Object作为哈希处理后获取原始数据类型?

时间:2015-06-19 13:54:24

标签: javascript object hash

LeetCode 136单号 给定一个整数数组,除了一个元素外,每个元素都会出现两次。找到那一个。

我通过在JS中使用Object-property作为Hash解决了这个问题。 但是,该属性仅允许字符串类型,因此所有数据都会自动转换为字符串。

var singleNumber = function(nums) {
var hash = {}
for(var i=0;i<nums.length;i++)
    if (hash.hasOwnProperty(nums[i]))
        delete hash[nums[i]]
    else
        hash[nums[i]] = 1
for(var x in hash)
    return Number(x) }

如何在处理后获得原始数据类型?在这个问题中,我使用Number()进行转换。

但是,如果此问题中的数组不仅包含数字,还包含字符串。 [&#39; 123&#39;,123,...]可能会因上述解决方案而失败。

2 个答案:

答案 0 :(得分:1)

它可以轻松完成,只需存储对象而不是1

https://jsfiddle.net/uo8v55qf/1/

var singleNumber = function(nums) {
var hash = {}
for(var i=0;i<nums.length;i++)
    if (hash.hasOwnProperty(nums[i]))
        delete hash[nums[i]]
    else
        hash[nums[i]] = { value:nums[i], type: typeof nums[i]};
for(var x in hash)
 return hash[x];
}    
result = singleNumber(['123',123,'23']);
console.log(result);
console.log(result.value + ' type:' + result.type); //23 type:string

result = singleNumber(['123',123,23]);
console.log(result.value + ' type:' + result.type); //23 type:number

答案 1 :(得分:0)

此解决方案仅适用于整数。 (或可以解析为整数的字符串)

var array = ['12', 12, 4, 33, 9, '33', 9]; // 4 is the element you search for

var hash = {};
array.forEach(function(number) {
    number = parseInt(number);
    // if the number doesn't exists initialize the hash entry with 1 otherwise add 1
    hash[number] = hash[number] ? 1 : ++hash[number]; 
});

for (var key in hash) {
    if (hash[key] === 1) console.log('Element ' + key + ' appears once');
}