相关疑难解决方法(0)

如何动态合并两个JavaScript对象的属性?

我需要能够在运行时合并两个(非常简单的)JavaScript对象.例如,我想:

var obj1 = { food: 'pizza', car: 'ford' }
var obj2 = { animal: 'dog' }

obj1.merge(obj2);

//obj1 now has three properties: food, car, and animal
Run Code Online (Sandbox Code Playgroud)

有没有人有这个脚本或知道内置的方法来做到这一点?我不需要递归,我不需要合并函数,只需要平面对象上的方法.

javascript javascript-objects

2338
推荐指数
33
解决办法
122万
查看次数

Immutable.js数据结构的自定义相等语义

我希望Sanctuary能够提供与Fantasy Land兼容的Map和Set类型以及基于值的等式语义.理想情况下,这些值是不可变的,尽管这并不重要,因为Sanctuary将提供用于合并和操纵这些值的纯函数.

我很乐意利用Immutable.js团队所做的出色工作; 我想实现持久数据结构需要相当大的努力!

由于Sanctuary会公开与这些值交互的函数,因此Immutable.js提供的API并不重要.但是,这些类型的等同语义至关重要.

这对我的用例来说是不可接受的:

> Map([[[1, 2, 3], 'foo'], [[1, 2, 3], 'bar']])
Map { [1,2,3]: "foo", [1,2,3]: "bar" }
Run Code Online (Sandbox Code Playgroud)

[1, 2, 3]是一样的价值[1, 2, 3].不应该有两个具有相同键的映射条目.

处理-0也存在问题:

> Immutable.is(Map([[0, 0]]), Map([[-0, -0]]))
true
Run Code Online (Sandbox Code Playgroud)

我意识到可以通过定义equals方法来定义自己类型的相等语义,但我希望重新定义本机类型(如Array和Number)的相等语义.这可能吗?相关文件似乎是is.js,但我看不到自定义的钩子.

Sanctuary的Map类型可能会包装Immutable.js Map类型.这将提供:

  • 一种处理方式-0;
  • 在执行assoc通常会导致重复键的操作之前执行基于值的相等性检查的机会; 和
  • 一个定义各种fantasy-land/方法的地方.

也许:

Map k v = { negativeZero :: Maybe v
          , value :: ImmutableMap k v …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming immutable.js sanctuary

9
推荐指数
1
解决办法
442
查看次数

如何将对象拆分为嵌套对象?(递归方式)

我有一个包含下划线(_)变量名的数据集。如下图:

const data = {
   m_name: 'my name',
   m_address: 'my address',
   p_1_category: 'cat 1',
   p_1_name: 'name 1',
   p_2_category: 'cat 2',
   p_2_name: 'name 2'
}
Run Code Online (Sandbox Code Playgroud)

我想将它们拆分为嵌套对象/数组,下面是我想要的结果。

{
 m: {
     name: "my name",
     address: "my address"
 },
 p: {
    "1": {category: 'cat 1', name: 'name 1'}, 
    "2": {category: 'cat 2', name: 'name 2'}
 } 
}
Run Code Online (Sandbox Code Playgroud)

如何编写递归方法来实现它而不是硬编码?也许它应该允许处理更深的嵌套对象,例如 "p_2_one_two_category: 'value'" 到 p:{2:{one:{two:category:'value'}}}

const data = {
   m_name: 'my name',
   m_address: 'my address',
   p_1_category: 'cat 1',
   p_1_name: 'name 1',
   p_2_category: 'cat 2',
   p_2_name: 'name 2' …
Run Code Online (Sandbox Code Playgroud)

javascript arrays recursion object

8
推荐指数
1
解决办法
646
查看次数

与Ramda递归"合并"或"延伸"?

我试图找到一个同等功能的Lodash的合并使用Ramda,做一个递归对象键为基础的"合并"或"扩展".行为类似于以下内容:

let merged = R.someMethod(
  { name: 'Matt', address: { street: 'Hawthorne', number: 22, suffix: 'Ave' }},
  { address: { street: 'Pine', number: 33 }}
);

console.log(merged);

// => { name: 'Matt', address: { street: 'Pine', number: 33, suffix: 'Ave' }}
Run Code Online (Sandbox Code Playgroud)

我在下面简要介绍的pull请求中注意到R.set了,但之后很快就回滚了.从那以后,Ramda库是否已捕获此功能?

Ramda有这个功能吗?

javascript functional-programming ramda.js

5
推荐指数
2
解决办法
3588
查看次数

反应 | JavaScript:需要比较两个对象

客观的:

我需要检查表单是否已被用户编辑。如果是,那么我将调用axios.put()函数。

问题:

由于在 JS 中, obj1 = { name: "John "} !== obj2 = { name: "John" } 我正在寻找一种更好的方法来比较两个对象。

我的方式(似乎效率低下):

const intialAddress= {
   city: "CA"
   line1: "testline1"
   line2: "testline2"
   phone: "7772815615"
   pin: "1234"
   state: "CA"
}

const [address, setAddress] = useState(initialAddress);
let addressFinalValue = {};
const addressValue = (e) => {
        addressFinalValue[e.target.name] = e.target.value;
    };

/***************************
 * The way I am doing it 
 **************************/

const submitHandler = (e) => {
  e.preventDefault();
  setAddress(addressFinalValue);
  if ( address.line1 !== initialAddress.line1 …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native react-redux

3
推荐指数
2
解决办法
2万
查看次数

比较两个对象并获取共同值 JavaScript

我想比较两个对象,并想制作一个具有共同属性的新对象。我已经看到很多解决方案来采取差异,但不确定我们如何才能采取共同的价值观。

这是我的对象,如果 obj1 的 iscommisionAccount false 和 obj2 的 iscommisionAccount true 则我的结果不应该有值,因为如果两者具有相同的属性,则结果不匹配,则只会得到结果。

我知道如果我们有对象数组我们可以使用过滤器但是如果我们只有对象怎么办。

obj 1 = {
   "val1":"test",
   "stream":{
      "iscommisonAccount":false,
      "istradeAccount":true
   }
}

 obj 2 = {
   "val1":"test",
   "stream":{
      "iscommisonAccount":true,
      "istradeAccount":true
   }
}

result = {
   "stream":{
      "istradeAccount":true
   }
}

diffrent examples:

obj 1 = {
   "val1":"test",
   "stream":{
      "iscommisonAccount":false,
      "istradeAccount":true
   }
}

 obj 2 = {
   "val1":"test",
   "stream":{
      "iscommisonAccount":true,
      "istradeAccount":false
   }
}

result = {
   "stream":{
   }
}

or

obj 1 = {
   "val1":"test",
   "stream":{
      "iscommisonAccount":true,
      "istradeAccount":true
   }
}

 obj …
Run Code Online (Sandbox Code Playgroud)

javascript arrays object typescript

3
推荐指数
1
解决办法
301
查看次数