如何将javascript中uint8array转成普通数组或字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将javascript中uint8array转成普通数组或字符串相关的知识,希望对你有一定的参考价值。
如何将javascript中uint8array转成普通数组或字符串
Uint8Array对象,8位无符号整数值的类型化数组。内容将初始化为 0。如果无法分配请求数目的字节,则将引发异常。
转换成普通数组的方法:
1、构造
uint8Array = new Uint8Array( length );
2、转换方法:
(1) var array = Array.from(uint8Array)
(2)var array = [].slice.call(uint8Array)
注意事项:
//js往ble写数据的时候,数据类型是arraybuffer类型。在Uint8Array组好数据之后,如果用了
subarray方法,要当心。//subarray返回的Uint8Array.buffer后的内存是subarray前的那片内
存。//如果要新传数据,最好新开辟内存,避免看到的和测到的不一样,产生问题。
参考技术A Array.prototype.slice.call(u8arr)大致上自己遍历一遍一个个复制到[]里就是了
参考技术B Uint8Array 对象8 位无符号整数值的类型化数组。内容将初始化为 0。如果无法分配请求数目的字节,则将引发异常。
转换成普通数组的方法:
1、构造
uint8Array = new Uint8Array( length );
2、转换方法:
(1) var array = Array.from(uint8Array)
(2)var array = [].slice.call(uint8Array) 参考技术C <script type="text/javascript">
var str = '["haha","\u003cspan", [123, 456, ["haha2"], "hello, this is a test."]]';
var objarr = eval(str); //和JSON.parse()的功能一样,生成了数组
alert(objarr[1]);
</script>
执行上面的代码试一下,你会发现他会正常的进行转换,你的代码之所以转换错误,是因为字符串里面有双引号,上面字符串里每一对双引号是括起来了一个值,你这样的字符串加进去就破坏了原来用逗号分类开的一对对的值,造成数组语法错误。所以,去掉双引号就可以了。
var str = '["haha","(\u003cspan dir\u003d\ltr\\u003e\u003cspan class\u003d\yP\ email\u003d\haha@gmail.com\\u003eHa Ha Ha\u003c/span\u003e\u003c/span\u003e)", [123, 456, ["haha2"], "hello, this is a test."]]';
var objarr = eval(str); //和JSON.parse()的功能一样
alert(objarr[1]);
或者在需要用到双引号的地方用单引号代替,单引号前面要加上\,即\‘来代替双引号。 参考技术D array就代表一个数组追问
那如何将这种类型数组转换成普通数组
如何将 javascript 对象转置为键/值数组
【中文标题】如何将 javascript 对象转置为键/值数组【英文标题】:How to transpose a javascript object into a key/value array 【发布时间】:2016-07-24 12:29:54 【问题描述】:给定一个 JavaScript 对象,我如何将它转换为一个对象数组(每个对象都有键、值)?
例子:
var data = firstName: 'John', lastName: 'Doe', email: 'john.doe@gmail.com'
结果如下:
[
key: 'firstName', value: 'John' ,
key: 'lastName', value: 'Doe' ,
key: 'email', value: 'john.doe@gmail.com'
]
【问题讨论】:
【参考方案1】:var data = firstName: 'John', lastName: 'Doe', email: 'john.doe@gmail.com'
var output = Object.entries(data).map(([key, value]) => (key,value));
console.log(output);
灵感来自post
【讨论】:
很好的答案。值得注意的是,REVERSE也可以做,即对象的键值: Object.fromEntries(data.map((key,value)=>([key, value])));【参考方案2】:使用map
函数
var data = firstName: 'John', lastName: 'Doe', email: 'john.doe@gmail.com' ;
var result = Object.keys(data).map(key => ( key, value: data[key] ));
console.log(result);
【讨论】:
它是 ECMAScript 6 解决方案吗? @AlexanderPopov 是的,它是arrow
函数
或更改变量名以键入地图并使用对象属性简写key => ( key, value: data[key] )
【参考方案3】:
您可以迭代对象的属性并为每个属性创建一个新对象。
var data = firstName: 'John', lastName: 'Doe', email: 'john.doe@gmail.com' ;
var result = [];
for(var key in data)
if(data.hasOwnProperty(key))
result.push(
key: key,
value: data[key]
);
【讨论】:
hasOwnProperty
支持hasOwnProperty
,但因为没有像@isvforall这样的功能性方式这样做而下降
@EmilOberg 没有以ES6
的方式这样做并不意味着这是一个不可靠(甚至更好且更具可读性)的答案。投反对票似乎很奇怪。
@roko-c-buljan,这与 ES6 无关。 Object.keys
和 Array.map
都是不错的旧 EcmaScript 5.1。 (是的,@isvforall 使用的箭头函数是 ES6,但并不是答案中真正有趣的部分,例如查看@rob-brander 的答案)
@EmilOberg—"没有 ES6 的内容" — 除了 ES6 位(箭头函数,速记属性)。 :-/【参考方案4】:
前面的回答让我觉得还有更好的办法……
Object.keys(data).map(function(key)
return key, value: data[key] ;
);
或者在 ES6 中使用箭头函数:
Object.keys(data).map((key) => ( key, value: data[key] ));
【讨论】:
错误:Unexpected token :
啊,好抓;我已经修好了。我只是缺少箭头函数返回值周围的括号。【参考方案5】:
让您的生活更轻松,并使用带有地图的 es6 语法
var output = Object.keys(data).map(key =>
return
key: key,
value: data[key]
;
)
【讨论】:
【参考方案6】:var result = [];
for(var k in data) result.push(key:k,value:data[k]);
【讨论】:
【参考方案7】:或者疯狂地自定义 key
和 value
键:
module.exports = function objectToKeyValueArray(obj, keyName = 'key', valueName = 'value')
return Object
.keys(obj)
.filter(key => Object.hasOwnProperty.call(obj, key))
.map(key =>
const keyValue = ;
keyValue[keyName] = key;
keyValue[valueName] = obj[key];
return keyValue;
);
;
【讨论】:
【参考方案8】:执行此操作的替代方法适用于多级对象并且不使用递归。
var output = []
var o =
x:0,
y:1,
z:
x0:
x1:4,
y1:5,
z1:6
,
y0:2,
z0:[0,1,2],
var defer = [ [ o ,[ '_root_' ] ] ]
var _defer = []
while(defer.length)
var current = defer.pop()
var root = current[1]
current = current[0]
for(var key in current )
var path = root.slice()
path.push(key)
switch( current[key].toString() )
case '[object Object]':
_defer.push( [ current[key] , path ] )
break;;
default:
output.push(
path : path ,
value : current[key]
)
break;;
if(!defer.length)
defer = _defer.splice(0,_defer.length)
[
path: [ '_root_', 'x' ], value: 0 ,
path: [ '_root_', 'y' ], value: 1 ,
path: [ '_root_', 'z', 'y0' ], value: 2 ,
path: [ '_root_', 'z', 'z0' ], value: [ 0, 1, 2 ] ,
path: [ '_root_', 'z', 'x0', 'x1' ], value: 4 ,
path: [ '_root_', 'z', 'x0', 'y1' ], value: 5 ,
path: [ '_root_', 'z', 'x0', 'z1' ], value: 6
]
【讨论】:
【参考方案9】:我会说使用 npm package flat。 非常适合嵌套对象和数组。
var flatten = require('flat')
flatten(
key1:
keyA: 'valueI'
,
key2:
keyB: 'valueII'
,
key3: a: b: c: 2
)
//
// 'key1.keyA': 'valueI',
// 'key2.keyB': 'valueII',
// 'key3.a.b.c': 2
//
【讨论】:
【参考方案10】:const array = [
key: "key1", value: "value1" ,
key: "key2", value: "value2" ,
];
const obj = Object.fromEntries(array.map(item => [item.key, item.value]));
console.log(obj);
【讨论】:
虽然此代码可以解决 OP 的问题,但最好包含关于您的代码如何解决 OP 问题的说明。这样,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能得到支持。这些功能,以及所有帖子都是独立的要求,是 SO 作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。【参考方案11】:const array = [
key: "key1", value: "value1" ,
key: "key2", value: "value2" ,
];
const obj = Object.fromEntries(array.map(item => [item.key, item.value]));
console.log(obj);
【讨论】:
这是相反的方式以上是关于如何将javascript中uint8array转成普通数组或字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 在浏览器中使用 localstorage 存储 Uint8array
create-react-app javascript 将文件转换为 Uint8Array