如何“拼接”对象?

时间:2019-09-11 12:52:42

标签: javascript loops conditional-statements

这是我要实现的目标:

名为 Splice 的函数,该函数可以包含3个参数:

  1. 第一个是对象。
  2. 第二个数字。
  3. 第三个是数字。

它从对象获取属性,并将其用于新创建的对象。

哪些属性由两个数字定义。第二个参数指示我要开始从中获取属性的键/值对的位置,第三个参数指示我要删除的数量。

因此,例如,splice(0,2)指向具有以下对象的对象的位置0和1:var obj = {a:1,b:2,c:2},并使用参数obj,0,2应该返回{a:1,b:2}

如果未传递第三个参数,则默认为1。

这是我到目前为止的内容(当仅传入一个数字时,不尊重最后一部分):

function splice(object, number, number2) {
    var newOjb = {};
    var count = 0;
    object.forEach(function(element, index) {
        count++;
            if(count <= number2 && count > number) {
                newObj[key]=item
            } else if (number == count) {
                newObj[key]=item
            }
    })
    return newObj;
}

但是,我似乎使用了一些错误的语法,因为控制台告诉我forEach循环不是函数,并且代码通常似乎不起作用。

对基本解决方案有什么想法(没有花哨的技巧)?

3 个答案:

答案 0 :(得分:2)

使用Object.entries(object).forEach(function([key, item], index) {(注意:这不能保证顺序)。您在var newOjb = {};

中也有错字

P.S。您不需要count,可以在您的条件下使用index

number-索引,number2-计数

function splice(object, number, number2) {
  var newObj = {};

  if (!number2) {
    number2 = 1;
  }
  Object.entries(object).forEach(function([key, item], index) {

    if (index >= number && index - number < number2) {
      newObj[key] = item
    }
  })
  return newObj;
}

let obj = {
  a: 1,
  b: 2,
  c: 2
};

console.log(splice(obj, 0, 2))
console.log(splice(obj, 2))
console.log(splice(obj, 1, 2))

答案 1 :(得分:1)

FWIW,下面是一个函数,其功能与对象的行为render(){ var link = "www.some/random/link.jpg" return( <div> <img src="some_image_source" alt={link}/> </div> ) } 完全一样(尽管不知道这是否等同于“幻想”):

Array.splice

但是请注意,通常您不应该依赖以任何特定方式对对象属性进行排序。该顺序是由标准定义和强制执行的,但并非所有引擎和工具都正确。

答案 2 :(得分:0)

对于您的默认值问题,这是一种效果很好的模式

function myfunction1(val) {
  this.val = val ? val : 1;
  console.log(this.val);
}