Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-使用扩展源对象到目标对象的属性_Javascript - Fatal编程技术网

JavaScript-使用扩展源对象到目标对象的属性

JavaScript-使用扩展源对象到目标对象的属性,javascript,Javascript,我正在构建一个JavaScript函数,将源对象的可枚举属性分配给目标对象。但是,后续源会覆盖以前源的属性指定 例如,如果这样称呼: extend({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); 应该返回-->{'user':'fred','age':40} 奖金:使用Reduce 这是编程新兵训练营的一项训练/挑战,我一直在不断地研究以找到解决方案。我这里的问题是测试对象不包含在数组中,所以我不能使用reduce来操作它们。

我正在构建一个JavaScript函数,将源对象的可枚举属性分配给目标对象。但是,后续源会覆盖以前源的属性指定

例如,如果这样称呼:

extend({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
应该返回-->
{'user':'fred','age':40}

奖金:使用Reduce

这是编程新兵训练营的一项训练/挑战,我一直在不断地研究以找到解决方案。我这里的问题是测试对象不包含在数组中,所以我不能使用reduce来操作它们。我尝试了多种改变测试对象的方法,比如Array.prototype.slice.call(参数)

仍在学习,因此如果有任何疏忽或考虑,请让我知道。我已经做了一段时间了,所以我很有信心会有一些简单的心理错误

我目前无法通过代码提供的所有测试

示例代码:

function extend(destination) {
    var args = Array.prototype.slice.call(arguments);

    var result = args.reduce(function (newObj, currentObj) {
        for (var key in currentObj) {
            if (currentObj.hasOwnProperty(key)) {
                newObj[key] = currentObj[key];
            }
        }
        return newObj;
    }, {});

    return result;
}

这个。。。运算符返回一个参数数组。因此,您可以减少它,并使用对象分配来复制道具,有趣的是,这不会覆盖…

将参数列表转换为一个数组,然后使用reduce作为您通常使用的方法

函数扩展(){
变量输入阵列=[];
对于(var i=0,len=参数.len;ivar results=extend({'user':'barney'},{'age':40},{'user':'fred'});//{用户:“fred”,年龄:40}
旁注:并非所有浏览器都提供扩展语法@Jim01,但由于这是一个编码挑战,当他进入生产环境时,它将在大多数浏览器中可用…同意。我只是给后来发现这个问题的人留了个便条。如果这超出了注释的范围,我将删除它。@TheJim01不,我也想添加它,您的速度稍微快了一点。非常感谢您提供的信息,可能是因为我对arrow语法还是什么不熟悉,但我无法通过此函数的所有测试。谢谢!我能够用这种方法进行测试。对于您的代码部分:var keys=Object.keys(val),key=null;对于(var keyIdx in keys){key=keys[keyIdx];acc[key]=val[key];你能用外行的术语解释一下你是如何处理这个问题的吗?我更精通数组表示法,而不太熟悉对象notation@DarrickTM不需要Object.keys。只需为(var keyIdx in val)执行即可.Object keys返回一个对象键数组…@Jonasw是正确的,在场景中不需要它(使用
for(in)
方法)。如果要使用带有真实计数器的
for
循环,将键分解成数组可能会很有用(或者您可以自己保留一个计数器).顺便说一下,您的代码正在运行…嗯,
const extend=Object.assign;
function extend(...objs){
 return objs.reduce((newobj,obj)=>Object.assign(newobj,obj),{});
}