如何使用underscore.js中的另一个数组元素属性更新数组元素属性

时间:2016-12-03 06:29:59

标签: javascript underscore.js

第一个数组

userData = [
    { name: abc, age: 24 },
    { name: ghi, age: 22 },
    { name: tyu, age: 20 }
];

第二个数组

userAge = [
    { age: 25 },
    { age: 26 },
    { age: 22 }
];

两个数组都有相同的长度。

如何使用Underscore.js使用useData[0].age更新userAge[0]

2 个答案:

答案 0 :(得分:0)

由于您需要在字典列表中执行此操作,因此您需要使用_.each迭代列表。

这样的事情会有所帮助,

static int exec_prog(const char **argv)
{
pid_t   my_pid;
int   status, timeout /* unused ifdef WAIT_FOR_COMPLETION */;

if (0 == (my_pid = fork())) {
        if (-1 == execve(argv[0], (char **)argv , NULL)) {
                perror("child process execve failed [%m]");
                return -1;
        }
}

#ifdef WAIT_FOR_COMPLETION
timeout = 1000;

while (0 == waitpid(my_pid , &status , WNOHANG)) {
        if ( --timeout < 0 ) {
                perror("timeout");
                return -1;
        }
        sleep(1);
}

printf("%s WEXITSTATUS %d WIFEXITED %d [status %d]\n",
        argv[0], WEXITSTATUS(status), WIFEXITED(status), status);

if (1 != WIFEXITED(status) || 0 != WEXITSTATUS(status)) {
        perror("%s failed, halt system");
        return -1;
}

#endif
return 0;
}

答案 1 :(得分:0)

虽然@martianwars是正确的,但如果它可以应用任何属性,它可能会更通用,因此更有用。

假设我们要应用一组更改,每个更改不一定是相同的属性,甚至每个对象都有多个属性:

var changes = [
    { age: 25 },
    { name: "Guy" },
    { name: "Pierre", age: 22 }
];

可以使用_.extendOwn

应用更改
_.each(userData, function(data, index) {
    _.extendOwn(data, changes[index]);
});

概念证明:

&#13;
&#13;
var userData = [{
  name: "abc",
  age: 24
}, {
  name: "ghi",
  age: 22
}, {
  name: "tyu",
  age: 20
}];

var changes = [{
  age: 25
}, {
  name: "Guy"
}, {
  name: "Pierre",
  age: 22
}];


_.each(userData, function(data, index) {
  _.extendOwn(data, changes[index]);
});

console.log(userData);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
&#13;
&#13;

这仅在阵列同步时才有效。这意味着如果userData数组中有4个对象,并且只有3个更改,则它们需要位于正确的索引处,这可能会成为问题。

对此的解决方案是拥有一个标识属性,通常由id属性表示。

userData = [
    { id: '1', name: 'abc', age: 24 },
    { id: '2', name: 'ghi', age: 22 },
    { id: '3', name: 'tyu', age: 20 }
];

有关详细信息,请参阅Merge 2 objects based on 1 field using Underscore.js