如何写在JavaScript中的数组和对象的输入速度最快的选择功能?

问题描述 投票:1回答:5

写了一个名为“选择”功能。

给定一个arrayobject“选择”返回一个新object,其特性是在给定的object那些,其keys存在于给定array

笔记:

  • 如果密钥存在于给定array,但不是在给定的object,它应该忽略他们。
  • 它不会修改传入的对象。

(a)中可以过滤array以查看是否元件在keyobj匹配

(b)中可以创建一个空object作为占位符

(c)中可以使用推或其它方法来添加匹配的key到新object元素

(d)可以返回新object

var arr = ['a', 'c', 'e'];
var obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
};

function select(arr, obj) {
  var nuObj = {};
  for (var i in arr) {
    for (var key in obj) {
      if (arr[i] === key) {
        nuObj[key] = obj[key];

      }
    }
  } return nuObj;
}
  var output = select(arr, obj);
  console.log(output); // --> { a: 1, c: 3 }
javascript arrays object javascript-objects
5个回答
2
投票

你可以映射对象,并检查是否存在的关键,然后返回一个新的对象,否则分配到一个一个的空对象。

让我们来看看这条线

Object.assign(...arr.map(k => k in obj ? { [k]: obj[k] } : {}))

Object.assign需要的对象,并返回一个单一的对象

Object.assign(                                                )

spread syntax ...,需要一个可迭代,如阵列,并且使用的项目作为参数

              ...

对于所采取的参数qazxsw POI并映射对象阵列的每个项

arr

这是 arr.map( ) 回调

Array#map

其中与 k => k in obj ? { [k]: obj[k] } : {} 支票一个conditional (ternary) operator ?:测试如果属性中的对象存在

in operator

如果存在,则返回一个新的对象与 k in obj ? : 和原始对象的值

computed property name

或者如果没有,则返回一个空的对象,这是中性的后 { [k]: obj[k] } 的感

Oject.assign

                                                           {}

或者使用功能更强大的方式与以前的滤波自己的属性。

var arr = ['a', 'c', 'e'],
    obj = { a: 1, b: 2, c: 3, d: 4 },
    result = Object.assign(...arr.map(k => k in obj ? { [k]: obj[k] } : {}));

console.log(result);

0
投票

您可以使用var arr = ['a', 'c', 'e'], obj = { a: 1, b: 2, c: 3, d: 4 }, result = Object.assign(...arr .filter(Object.prototype.hasOwnProperty, obj) .map(k => ({ [k]: obj[k] })) ); console.log(result);

.reduce()

0
投票

您可以使用var arr = ['a', 'c', 'e']; var obj = { a: 1, b: 2, c: 3, d: 4 }; var select = (arr, obj) => arr.reduce((r, c) => (c in obj ? r[c] = obj[c] : r, r), {}); console.log(select(arr, obj));


0
投票

您可以使用var arr = ['a', 'c', 'e']; var obj = {a: 1,b: 2,c: 3,d: 4}; let op = arr.reduce( (op, inp) => { if(obj[inp]){ op[inp] = obj[inp] } return op },{}) console.log(op)reduce()

arr

然而,你的代码的简化版本,可能是这样:

var arr = ['a', 'c', 'e'];
var obj = {a: 1, b: 2, c: 3, d: 4};

let res = arr.reduce((acc, curr) => 
{
    if (obj.hasOwnProperty(curr))
        acc[curr] = obj[curr];
    return acc;
}
,{});

console.log(res);

0
投票

那么,这是更短:

var arr = ['a', 'c', 'e'];
var obj = {a: 1, b: 2, c: 3, d: 4};

function select(arr, obj)
{
    var nuObj = {};

    for (let key in obj)
    {
        if (arr.includes(key))
            nuObj[key] = obj[key];
    }

    return nuObj;
}

var output = select(arr, obj);
console.log(output);

function select(arr, obj) { var resultObj = {}; for (var value of arr) value in obj && (resultObj[value] = obj[value]) return resultObj; } + Object.keys循环工作为好,但要慢得多

for
© www.soinside.com 2019 - 2024. All rights reserved.