如何将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 =&gt; ( 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.keysArray.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】:

或者疯狂地自定义 keyvalue 键:

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

在 WebAssembly 和 JavaScript 之间传输字节数组 (Uint8Array)

JavaScriptString转Uint8Array

JavaScriptString转Uint8Array

在 javascript ArrayBuffer 中访问 Uint8Array